我正在尝试创建一个元类,但是当我将它分配给另一个类时,我收到了错误,TypeError: __init_subclass__() takes no keyword arguments但我没有实现任何__init_subclass__. 为什么要调用这个函数?
class Meta(type):
def __new__(cls, name, bases, dct):
return super().__new__(cls, name, bases, dct)
class MyClass(meta=Meta):
pass
Run Code Online (Sandbox Code Playgroud)
更改meta为metaclass。传递给类签名的任何关键字参数都会传递给其父类的__init_subclass__方法。由于您输入meta而不是metaclass此metakwarg 被传递给其父级的 ( object)__init_subclass__方法:
>>> object.__init_subclass__(meta=5)
TypeError: __init_subclass__() takes no keyword arguments
Run Code Online (Sandbox Code Playgroud)
如果您实际实现了一个__init_subclass__但输入错误,则会引发类似的错误:
class Parent:
def __init_subclass__(cls, handler=None):
super().__init_subclass__()
cls.handler = handler
class CorrectChild(Parent, handler=5):
pass
class TypoChild(Parent, handle=5):
# TypeError: __init_subclass__() got an unexpected keyword argument 'handle'
pass
Run Code Online (Sandbox Code Playgroud)