gpt4 book ai didi

python - __metaclass__ 不应该强制在 Python 中使用元类吗?

转载 作者:太空狗 更新时间:2023-10-29 22:06:10 24 4
gpt4 key购买 nike

我一直在努力学习 Python 中的元类。我明白了主要思想,但我似乎无法激活该机制。据我了解,您可以在构造类 K 时指定 M 作为元类,方法是在全局或类级别将 __metaclass__ 设置为 M。为了对此进行测试,我编写了以下程序:

p = print

class M(type):
def __init__(*args):
type.__init__(*args)
print("The rain in Spain")

p(1)
class ClassMeta:
__metaclass__ = M

p(2)
__metaclass__ = M
class GlobalMeta: pass

p(3)
M('NotMeta2', (), {})

p(4)

但是,当我运行它时,我得到以下输出:

C:\Documents and Settings\Daniel Wong\Desktop>python --versionPython 3.0.1C:\Documents and Settings\Daniel Wong\Desktop>python meta.py123The rain in Spain4

我不是应该在 1 和 2 之后看到“西类牙的雨”吗?这是怎么回事?

最佳答案

在 Python 3(您正在使用的)中,元类由类定义中的关键字参数指定:

class ClassMeta(metaclass=M):
pass

指定 __metaclass__ 类属性或全局变量是 Python 2.x 中的旧语法,不再受支持。另见 "What's new in Python 3"PEP 2115 .

关于python - __metaclass__ 不应该强制在 Python 中使用元类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/818483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com