我在写一个元类,不小心就这样做了:
class MetaCls(type):
def __new__(cls, name, bases, dict):
return type(name, bases, dict)
…而不是这样:
class MetaCls(type):
def __new__(cls, name, bases, dict):
return type.__new__(cls, name, bases, dict)
这两个元类到底有什么区别?更具体地说,是什么导致了第一个类不能正常工作(一些类没有被元类调用)?
最佳答案
在第一个示例中,您创建了一个全新的类:
>>> class MetaA(type):
... def __new__(cls, name, bases, dct):
... print 'MetaA.__new__'
... return type(name, bases, dct)
... def __init__(cls, name, bases, dct):
... print 'MetaA.__init__'
...
>>> class A(object):
... __metaclass__ = MetaA
...
MetaA.__new__
>>>
在第二种情况下,您正在调用父级的
>>> class MetaA(type):
... def __new__(cls, name, bases, dct):
... print 'MetaA.__new__'
... return type.__new__(cls, name, bases, dct)
... def __init__(cls, name, bases, dct):
... print 'MetaA.__init__'
...
>>> class A(object):
... __metaclass__ = MetaA
...
MetaA.__new__
MetaA.__init__
>>>
关于python - python中类型和类型.__ new__有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2608708/