python: перегрузка сложения и т.д. для родительского класса, но возвращение результата как от дочернего
подскажите как корректно решить следующую ситуацию:
есть базовый класс MyBaseClass с перегруженным оператором __add__
и есть дочерний класс MyChildClass, который в конструкторе выставляет свои параметры, а большая часть функций уже от базового класса
в итоге:
class MyBaseClass:
def __add__(self, other):
return MyBaseClass(...) # тут вычисляю необходимые параметры из self и other
class MyChildClass(MyBaseClass):
def __init__(self, ...):
# тут устанавливаю необходимые параметры
В результате когда я делаю
a = MyChildClass(...)
b = MyChildClass(...)
c = a + b
то type(c) выдаёт, что это MyBaseClass
Вопрос - а как сделать, чтобы это был именно MyChildClass?
Без переноса кода в MyBaseClass конечно же иначе какой смысл в базовом
Ответы (1 шт):
Автор решения: Roman-Stop RU aggression in UA
→ Ссылка
Динамически вызывайте нужный конструктор:
class MyBaseClass:
def __init__(self, val):
self.val = val
def __add__(self, other):
return type(self)(self.val + other.val)
def __str__(self):
return f"{type(self).__name__}({self.val})"
class MyChildClass(MyBaseClass):
def __init__(self, val):
super().__init__(val)
a = MyChildClass(1)
b = MyChildClass(2)
c = a + b
print(c)