Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Metaclass_Python 3.8_Python Dataclasses - Fatal编程技术网

Python 具有元类注册的数据类

Python 具有元类注册的数据类,python,metaclass,python-3.8,python-dataclasses,Python,Metaclass,Python 3.8,Python Dataclasses,我有一个dataclass a,它可以被继承并用于创建其他类。每次继承类A时,我都希望将子类注册到容器中。我想用元类来解决它,但它对我不起作用。需要帮忙吗 container={} 类元(类型): 定义(mcs、*args、**kwargs): new_class=super() 如果是新的\u类。\u名称\u!='A': 容器[新\u类.\u名称\u]=新\u类 返回新的\u类 @元类 大师班: 父母亲 @元类 A类(主类,元类=元): 我的阿格 @元类 类Child(A):#您的代码几乎是正

我有一个dataclass a,它可以被继承并用于创建其他类。每次继承类A时,我都希望将子类注册到容器中。我想用元类来解决它,但它对我不起作用。需要帮忙吗

container={}
类元(类型):
定义(mcs、*args、**kwargs):
new_class=super()
如果是新的\u类。\u名称\u!='A':
容器[新\u类.\u名称\u]=新\u类
返回新的\u类
@元类
大师班:
父母亲
@元类
A类(主类,元类=元):
我的阿格
@元类

类Child(A):#您的代码几乎是正确的,但是在应该是“@dataclass”装饰器时使用“@metaclass”,并在字段上创建一些注释,否则将出现NameError异常

所以,如果你只是这样做:

从数据类导入数据类
从输入任何
容器={}
类元(类型):
定义(mcs、*args、**kwargs):
new_class=super()
如果是新的\u类。\u名称\u!='A':
容器[新\u类.\u名称\u]=新\u类
返回新的\u类
@数据类
大师班:
家长:有吗
@数据类
A类(主类,元类=元):
我的阿格:有吗
@数据类

类Child(A):#使用
\uuu init\u subclass\uu
方法的解决方案正是我在本例中所需要的。非常感谢。