有一个抽象类Foo
from abc import ABC
class Foo(ABC):
pass
如何使此类的所有继承人的实例都必须声明一个成员self.foo?
我找到了实现抽象property类的解决方案,但这不是所需要的,因为该成员需要可用于读取和写入。
为什么
有一个基类Descriptor
from abc import ABC
class Descriptor(ABC):
pass
描述符意味着它必须有一些字段(例如,self.fields = dict())。例如,一个文件描述符:
class FileDescriptor(Descriptor):
def __init__(self):
self.fields = dict(
name='name',
path=PathDescriptor(),
...
)
此外,还需要丰富这个描述符。例如,
def enrich(self, data):
self.fields.update(data)
并且应该也可以读取这个描述符的字段
file_desc = FileDescriptor()
file_desc.enrich(dict(name='new name'))
print(file_desc.fields['name'])
如果没有 . 在其中声明,就不可能实例化后代Descriptor(例如 ),这是必要的。如何正确实施?FileDescriptorself.fields
有人怀疑它们适合这项任务dataclasses,但我从未与他们合作过,到目前为止我不知道如何应用它以及它是否适用。
字典内容不需要
property是可变的即可更新好吧,即使您需要允许您不仅更改内容,还更改链接本身,
property它也知道如何