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