我一直在尝试学习 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 --version Python 3.0.1 C:\Documents and Settings\Daniel Wong\Desktop>python meta.py 1 2 3 西班牙的雨 4
我不应该在 1 和 2 之后看到“西班牙的雨”吗?这里发生了什么?