Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类型错误:元类;“不接受任何论据”;_Python_Python 3.x_Metaclass - Fatal编程技术网

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

为什么必须从类型继承?为什么必须从类型继承?