我正在写一个元类,不小心就这样做了:
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)
这两个元类到底有什么区别?更具体地说,是什么导致第一个类不能正常工作(一些类不是由元类调用的)?
在第一个示例中,您正在创建一个全新的类:
在第二种情况下,调用父的
__new__
:首先需要弄清楚
object.__new__()
是如何工作的。这是来自下面的documentation:
所以在mg'sanswer中,前者不调用函数
__init__
,后者在调用__new__
后调用函数__init__
。请参阅下面的注释,希望对您有所帮助。
相关问题 更多 >
编程相关推荐