我有一个dataclass a,它可以被继承并用于创建其他类。每次继承类A时,我都希望将子类注册到容器中。我想用元类来解决它,但它对我不起作用。需要帮忙吗
container = {}
class Meta(type):
def __new__(mcs, *args, **kwargs):
new_class = super().__new__(mcs, *args, **kwargs)
if new_class.__name__ != 'A':
container[new_class.__name__] = new_class
return new_class
@metaclass
class MasterClass:
parent
@metaclass
class A(MasterClass, metaclass=Meta):
my_arg
@metaclass
class Child(A): # <-- this class I would like to register into child container
my_next_arg
您的代码几乎是正确的,但是在应该是“@dataclass”装饰器时使用“@metaclass”,并在字段上创建一些注释,否则将出现NameError异常
所以,如果你只是这样做:
它将如您所期望的那样工作,并且
Child
将在 容器:请注意,由于Python3.6,您不需要使用元类 对于这个模式,调用
__init_subclass__
类方法 在创建子类时,可以执行相同的操作:相关问题 更多 >
编程相关推荐