[*] Для любого 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 , это было бы точно таким же, за исключением вызова конструктора в последней строке метода. Это не кажется очень умным. Есть ли более разумный способ? br />
Код: Выделить всё
return A(args)by
Код: Выделить всё
return type(self)(args), кажется, работает; Это предпочтительный способ решить проблему?
Подробнее здесь: https://stackoverflow.com/questions/793 ... subclasses