首页 > 解决方案 > 在 python 中实例化元类

问题描述

我在 python 中编写了一个类,它继承自type. 我认为这是一个类的唯一要求,以便被称为元类,但没有__new__为它定义方法。但是在将这个新类作为元类实例化时,我收到一个错误,说明如下:

TypeError: type.__new__() takes exactly 3 arguments (0 given)

以下是我的代码:

class a(type) :
    pass 
c= a()

现在,当处理类语句时,正在调用的__new__方法type是我的假设。这是因为 python 中所有类的默认元类都是type.

现在,当我实例化类时a,假设从 () 继承的任何类都是元类,我假设它type是元类,这与创建类不一样吗?为什么这不会导致type.__new__使用正确的参数被调用?

标签: pythonmetaclass

解决方案


这不起作用:

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

推荐阅读