【发布时间】:2010-10-23 12:57:51
【问题描述】:
我一直在尝试学习 Python 中的元类。我明白了主要想法,但我似乎无法激活该机制。据我了解,您可以通过在全局或类级别将 __metaclass__ 设置为 M 来将 M 指定为构建类 K 时的元类。为了测试这一点,我编写了以下程序:
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 之后看到“西班牙的雨”吗?这是怎么回事?
【问题讨论】:
-
双重否定“不...不强制”很难解析。请你解决这个问题好吗?
-
感谢您的反馈。我认为现在应该更容易理解了。
标签: python oop python-3.x metaclass