[*] Для любого b объекта x , f (x) имеет тип b ;
Для любого c объекта x , f (x) имеет тип c . Я попробовал следующее: < /p>
Код: Выделить всё
class A:
def __init__(self, args):
...
def f(self) -> A:
args = ...
return A(args)
class B(A):
pass
class C(A):
pass
< /code>
и протестировано < /p>
x = B(...)
y = x.f()
assert isinstance(y, B)
Я мог бы решить свою проблему, просто определив метод f для как b , так и c < /code>, это было бы точно так же, за исключением вызова конструктора в последней строке метода. Это не кажется очень умным. Есть ли более разумный способ? /p>
Код: Выделить всё
return A(args)by
Код: Выделить всё
return type(self)(args), кажется, работает; Это предпочтительный способ решить проблему? [/b]
Подробнее здесь: https://stackoverflow.com/questions/793 ... subclasses