возможно ли добиться наследования типов без перезаписи методов класса? Возьмите, например, этот код:
class Parent:
def special_method(self, name):
print("hello, {}!".format(name))
class Child:
def __init__(self, injected_parent):
self.parent = injected_parent
def special_method(self):
self.parent.special_method("Homer Simpson")
parent = Parent()
child = Child(parent)
child.special_method()
# hello, Homer Simpson!
Работает, как ожидалось, но я хочу, чтобы тип child
был Parent
, а не Child
:
print(type(child))
<class '__main__.Child'>
В одну сторону Я видел, как это было сделано, чтобы расширить Child
с помощью:
class Child:
def __init__(self, injected_parent):
self.parent = injected_parent
self.__class__ = Parent
...
Однако тогда child
s special_method
перезаписывается:
parent = Parent()
child = Child(parent)
child.special_method()
# TypeError: special_method() missing 1 required positional argument: 'name'
Любой способ сделать child
имеют тип Parent
без побочных эффектов?