python - 在 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__
使用正确的参数被调用?
解决方案
这不起作用:
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', (), {})
推荐阅读
- reactjs - ReactJS materialUI如何在焦点上更改textarea的颜色
- python - 在 Numpy 中减去数组
- javascript - 如何在jQuery中用开始和结束元素包装元素?
- typescript - 据我了解,排除条件类型助手不起作用
- android - 空对象引用上的 Android getApplicationContext()
- go - 使用接口设置具体结构的值
- javascript - Javascript:从替换中的正则表达式中排除
- firebase - 如何正确调用等待?
- mongodb - 如何修复此 MongoDB 聚合查询?
- c++ - 不允许抽象类类型“QuarterBack”的对象