其中定義內嵌元類的功能,我得到了一個玩具蟒蛇例如行爲不同於其定義爲一類,我試圖理解爲什麼:的Python 2.7元類從繼承
>>> class Test(object):
... def __metaclass__(name, bases, nmspc):
... cls = type(name, bases, nmspc)
... def __init__(self, field, *args, **kwargs):
... print "making " + field
... super(cls, self).__init__()
... cls.__init__ = __init__
... return cls
...
>>> t = Test('lol')
making lol
>>> class Test2(Test): pass
...
>>> t = Test2('lol')
making lol
對戰:
>>> class Test(object):
... class __metaclass__(type):
... def __init__(cls, name, bases, nmspc):
... type.__init__(cls, name, bases, nmspc)
... def __init__(self, field, *args, **kwargs):
... print "making " + field
... super(cls, self).__init__()
... cls.__init__ = __init__
...
>>> t = Test('lol')
making lol
>>> class Test2(Test): pass
...
>>> t2 = Test2('lol')
making lol
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 7, in __init__
TypeError: __init__() takes at least 2 arguments (1 given)
那麼,定義一個類與定義一個函數究竟有什麼不同?它們最終都以一種稍微不同的方式返回一個類,因爲修改後的CLS .__ init__會以一種方式繼承,而不是其他方式。
我也檢查了類似的結構,通過外部函數和類聲明,我得到了相同的行爲。
你的問題似乎是*「爲什麼不同的事情有不同的表現?」* - 你能澄清你的期望嗎? – jonrsharpe 2014-09-12 22:28:27
我期待\ _ \ _ metaclass \ _ \ _這兩個定義的子類獲得相同的\ _ \ _ init \ _ \ _方法。 – ThrustVectoring 2014-09-12 22:43:56