Skip to main content
 首页 » 编程设计

python之在 python 中实例化一个元类

2025年05月04日20linjiqin

我用 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', (), {})