为什么以下代码会出错:
class StateMeta:
def __call__(*args, **kwargs):
pass
# end __call__
# end StateMeta
class State(metaclass=StateMeta):
pass
错误:
Traceback (most recent call last):
File "D:/FILE_MGMT_PYTHON/tempHSHDFHS).py", line 7, in <module>
class State(metaclass=StateMeta):
TypeError: StateMeta() takes no arguments
答案 0 :(得分:2)
您忘记让元类继承自type
,而是写StateMeta(type)
而不是StateMeta
。
答案 1 :(得分:0)
通过 __call__
模拟可调用对象旨在处理定义类的实例,而不是定义类本身。因此,您必须使用类 StateMeta
的实例:
class StateMeta:
def __call__(self, *args, **kwargs):
print("Called StateMeta")
pass
state_meta = StateMeta()
class State(metaclass=state_meta):
pass
除此之外,有点令人惊讶的是,您可以使用函数作为元类:
def meta(*args, **kwargs):
print("meta()", args, kwargs)
return object
class A(metaclass=meta):
pass