Python 类型错误:元类;“不接受任何论据”;
为什么以下代码会出现错误:Python 类型错误:元类;“不接受任何论据”;,python,python-3.x,metaclass,Python,Python 3.x,Metaclass,为什么以下代码会出现错误: 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
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
回溯(最近一次呼叫最后一次):
文件“D:/File_MGMT_PYTHON/tempHSHDFHS.py”,第7行,在
类状态(元类=状态元):
TypeError:StateMeta()不接受任何参数
您忘记让您的元类继承自类型
,写状态元(类型)
而不是状态元您忘记让您的元类继承自类型
,写状态元(类型)
而不是StateMeta
通过\uuuu call\uuuu
模拟可调用对象的目的是在定义类的实例上工作,而不是在定义类本身上工作。因此,您必须使用类的实例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
通过\uuuu call\uuuu
模拟可调用对象是为了在定义类的实例上工作,而不是在定义类本身上工作。因此,您必须使用类的实例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
为什么必须从类型继承?为什么必须从类型继承?