Как правильно конвертировать классы данных в Python, которые наследуются друг от друга (без повторяющегося кода)?
Пример:
from dataclasses import dataclass
@dataclass
class Parent:
p1: int
# …
@dataclass
class Child(Parent):
c1: int
# …
Моя попытка:
# Fail: How to call the parent constructor (like in C++)?
def make_child(parent: Parent, c1: int, …) -> Child:
return Child(
p1=parent.p1,
# …
c1=c1,
# …
)
# Fail: How to implicitly cast to parent (like in C++)?
def get_parent(child: Child) -> Parent:
return Parent(
p1=child.p1,
# …
)
Я знаю, что это было бы легко с композицией вместо наследования, но это не мой вопрос.
def from_instance(cls, instance, **kwargs): return cls(**dataclasses.asdict(instance), **kwargs)
для добавления настраиваемых дочерних атрибутов. - person Arne   schedule 10.02.2021