Voici une session python.La métaclasse n'est pas appelée dans les sous-classes
>>> 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
>>>
Après la classe XI attendent définis Z._new__ à appeler pour lui, et pour imprimer la deuxième ligne, ce qui ne se produit pas, (comme métaclasse sont hérités?)
Ah, d'accord, ça marche. Mais ne devrait pas retourner super (Z, cls) .__ new__' être équivalent à 'type .__ classe __. New' whis est équivalent à' type .__ new__' qui devrait être identique à la création d'une nouvelle classe via 'type'? – agiliq
En fait, ce n'est pas la même chose, j'aborde maintenant cela dans ma réponse. Super appelle la méthode 'type .__ new__', mais nous pouvons alors utiliser l'argument' cls' correct, ce qui n'est pas possible si nous appelons 'type' directement. – nikow