Код: Выделить всё
from attrs import define, Factory
@define
class BaseProperties:
identifier: str
name: str
parent_id: Optional[str]
@define
class ConnectorItem:
base_properties: BaseProperties
connections: "List[ConnectorItems]" = Factory(list)
@define
class ContainerItem:
base_properties: BaseProperties
children: "List[Union[ConnectorItem, ContainerItem]]" = Factory(list)
Код: Выделить всё
container_item.base_properties.identifier
Код: Выделить всё
@property
def identifier(self):
return self.base_properties.identifier
Код: Выделить всё
container_item.identifier
Второй вариант кажется громоздким, когда мне нужно просто скопировать и вставить кучу свойств установки и получения в каждом из классов, содержащих класс BaseProperties.
Следует ли мне в этом случае использовать наследование вместо композиции? Дело в том, что даже если ContainerItem и ConnectorItem имеют общие основные свойства, я никогда не буду использовать их в одном и том же контексте, поэтому в этом случае мне не нужен полиморфизм, я думаю, просто базовое повторное использование кода.
Как лучше реализовать этот случай, зная, что это упрощенная версия, в действительности ConnectorItem может состоять из разных классов, например, для получения разных типов ConnectorItemTypes.>
Подробнее здесь: https://stackoverflow.com/questions/784 ... omposition