Đây là phiên python.Metaclass không được gọi trong các lớp con
>>> 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
>>>
Sau khi tôi xác định lớp XI mong đợi Z._new__ được gọi cho nó, và để in các dòng hai, đó không xảy ra, (như metaclass được thừa kế?)
Ah, ok, công việc đó. Nhưng không nên 'trả về super (Z, cls) .__ new__' tương đương với' type .__ class __. New' whis tương đương với 'type .__ new__' nên giống như tạo một class mới thông qua' type'? – agiliq
Nó thực sự là không giống nhau, bây giờ tôi giải quyết điều này trong câu trả lời của tôi. Super không gọi phương thức 'type .__ new__', nhưng sau đó chúng ta có thể sử dụng đối số' cls' đúng, điều này là không thể nếu chúng ta gọi trực tiếp 'type'. – nikow