Мне нужны некоторые функции из класса X стороннего модуля m. Я мог бы просто использовать m.X напрямую, но в будущем мне может понадобиться заменить m.X на другой класс n.Y (например, если я найду лучшую реализацию).
Я бы хотел избежать изменения остальной части кода в такой ситуации.
Сейчас я хочу, чтобы полный интерфейс m.X, включая инициализацию, проходил без изменений. Я написал обертку W для m.X следующим образом:
class W(m.X):
def __init__(self, *args):
super().__init__(*args)
В будущем, если возникнет такая необходимость, я планирую переписать вышеприведенное как:
class W(n.Y):
def __init__(self, *args):
super().__init__(*args)
# override instance methods of n.Y that don't share the semantics with m.X
# for example, in case f1 is hard to replicate in n.Y:
# def f1(self, *args):
# print("this method is no longer available")
# raise MyDeprecatedMethod()
# for example, in case f2 needs to be recalculated
# def f2(self, *args):
# do the calculations required to keep W.f2 unchanged
Допустим ли мой текущий упаковщик для m.X? Есть ли проблемы с ним или с запланированной оберткой для n.Y?