【发布时间】:2021-05-17 12:53:57
【问题描述】:
我有许多数据类,都继承自一个基类。 mapping 应该被动态添加到每个子类中,然后由描述符的__set_name__ 用于在其中设置一个键。
这是这个结构的样子:
class Model:
def __init_subclass__(cls, *args, **kwargs):
cls.mapping = {}
@dataclass
class ModelA(Model):
property: str = Descriptor()
class Descriptor:
def __set_name__(self, owner, name):
owner.mapping[name] = 'foobar'
当描述符的__set_name__ 被调用时,mapping 似乎不存在。我尝试为ModelA 使用元类:
class Meta(type):
def __new__(cls, name, bases, dict):
dict['mapping'] = {}
return super().__new__(cls, name, bases, dict)
但是还是不行。
关于我的层次结构是如何构建的,我在这里缺少什么?我怎样才能实现我所追求的加载顺序?
注意我正在使用 Python 3.8.5
【问题讨论】:
标签: python subclass python-descriptors