Вот упрощенная версия моей структуры кода:
Код: Выделить всё
class AbstractClass(ABC):
class rational:
pass
@dataclass
class Frac(rational):
value1: int
value2: int
@dataclass
class Whole(rational):
value: int
@classmethod
@abstractmethod
def foo(cls, x: int, y: int) -> rational:
pass
@classmethod
@abstractmethod
def boo(cls, r: rational) -> str:
pass
class ConcreteClassA(AbstractClass):
@classmethod
def foo(cls, x: int, y: int) -> AbstractClass.rational:
...
@classmethod
def boo(cls, r: AbstractClass.rational) -> str:
...
class ConcreteClassB(AbstractClass):
@classmethod
def foo(cls, x: int, y: int) -> AbstractClass.rational:
...
@classmethod
def boo(cls, r: AbstractClass.rational) -> str:
...
a = ConcreteClassA.boo(ConcreteClassB.foo(9, -6))
b = ConcreteClassB.boo(ConcreteClassA.foo(9, -6))
Я использую Pyright для проверки типов. Как я могу изменить свой код, чтобы гарантировать возникновение ошибок при передаче данных между ConcreteClassA и ConcreteClassB? Обратите внимание: я предпочитаю не добавлять дженерики, псевдонимы типов или другие конструкции непосредственно в основной класс. Будем признательны за любые предложения и идеи!
А также реализацию @dataclss внутри AbstractClass, просто используйте ее.
(Цели обучения)
Подробнее здесь: https://stackoverflow.com/questions/783 ... lass-in-py