Как сказать Python, какой конструктор использовать для создания подклассов? [дублировать]Python

Программы на Python
Anonymous
Как сказать Python, какой конструктор использовать для создания подклассов? [дублировать]

Сообщение Anonymous »

Я в следующей ситуации: у меня есть тип a , два подтипа B и c of , функция f типа A -> a это так, что

[*] Для любого 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)
И, конечно, Assert повышает исключение, и теперь я понимаю, что должен был предсказать его (единственный f , который определяется Введите A ...).
Я могу решить свою проблему, просто определив метод f для B и c , это было бы точно таким же, за исключением вызова конструктора в последней строке метода. Это не кажется очень умным. Есть ли более разумный способ? br />

Код: Выделить всё

return A(args)

by

Код: Выделить всё

return type(self)(args)
.
, кажется, работает; Это предпочтительный способ решить проблему?

Подробнее здесь: https://stackoverflow.com/questions/793 ... subclasses

Вернуться в «Python»