Ecco una sessione python.Metaclass non viene chiamato nelle sottoclassi
>>> class Z(type):
def __new__(cls, name, bases, attrs):
print cls
print name
return type(name, bases, attrs)
...
>>> class Y(object):
__metaclass__ = Z
...
<class '__main__.Z'>
Y
>>> class X(Y):
... pass
...
>>> class W(Y):
... __metaclass__ = Z
...
<class '__main__.Z'>
W
>>>
Dopo definisco classe XI si aspettano Z._new__ di essere chiamato per questo, e per stampare la linea due, che non sta accadendo, (come metaclasse sono ereditati?)
Ah, ok, questo lavoro. Ma shouldnt 'return super (Z, cls) .__ new__' è equivalente a' type .__ class __. New' whis è equivalente a 'type .__ new__' che dovrebbe essere uguale alla creazione di una nuova classe tramite' type'? – agiliq
In realtà non è la stessa cosa, ora lo affronterò nella mia risposta. Super chiama il metodo 'type .__ new__', ma possiamo usare l'argomento' cls' corretto, che non è possibile se chiamiamo direttamente 'type'. – nikow