我用 python 写了一个继承自 type 的类。我认为这是一个类的唯一要求,以便被称为元类,但没有为它定义 __new__ 方法。但是在用这个新类作为元类实例化时,我得到了一个错误,说明如下:
TypeError: type.__new__() takes exactly 3 arguments (0 given)
以下是我的代码:
class a(type) :
pass
c= a()
现在,当处理类语句时,我假设正在调用 type 的 __new__ 方法。这是因为 python 中所有类的默认元类都是 type 。
现在,当我实例化类 a 时,我假设它是一个元类,假设任何继承自 (type) 的类都是一个元类,是这和创建一个类一样吗?为什么这不会导致使用正确的参数调用 type.__new__?
请您参考如下方法:
这不起作用:
class a(type) :
pass
c = a()
...出于同样的原因,这不起作用:
c = type()
最后,两者都做同样的事情。
要将它用作元类,请执行以下操作:
>>> class Class(metaclass=a):
... pass
...
>>> Class
<class '__main__.Class'>
>>> type(Class)
<class '__main__.a'>
您也可以像您尝试的那样直接实例化该类,但您必须提供正确的参数:
AnotherClass = type('AnotherClass', (), {})
YetAnotherClass = a('YetAnotherClass', (), {})
