Допустим, у меня есть три класса, один родительский класс и два подкласса:
class BaseModel:
def merge(self, other):
return self + other
class ChildA(BaseModel):
pass
class ChildB(BaseModel):
pass
У родительского класса есть метод, который принимает другой экземпляр текущего класса и возвращает новый экземпляр текущий класс (выходит за рамки этого вопроса).
Как аннотировать BaseModel.merge
, чтобы ограничить его только текущим подклассом?
Я могу сделать что-то вроде этого:
def merge(self, other: BaseModel) -> BaseModel:
return self + other
Но это все же позволяет мне передать экземпляр ChildB
в ChildA
, так как оба наследуются от BaseModel
. Я только хочу, чтобы ChildA
был разрешен в ChildA
, а ChildB
- для ChildB
. Как я могу сделать это без переопределения merge
для каждого подкласса?