Я пытаюсь создать класс-оболочку в Python со следующим поведением:
- Он должен принимать в качестве аргумента существующий класс, от которого он должен наследовать все методы и атрибуты
- Методы класса-обертки должны иметь возможность использовать Python super () для доступа к методам суперкласса (переданного в качестве аргумента)
Из-за моего второго требования я думаю, что решения здесь будет недостаточно (и в любом случае у меня возникают отдельные проблемы, связанные с копированием некоторых методов суперкласса, от которого я пытаюсь унаследовать).
Я пробовал это, но это не правильно ...
class A:
def shout(self):
print("I AM A!")
class B:
def shout(self):
print("My name is B!")
class wrapper:
def __init__(self, super_class):
## Some inheritance thing here ##
# I initially tried this but no success...
super(super_class).__init__() # or similar?
def shout(self):
print('This is a wrapper')
super().shout()
И это поведение, которое мне требуется ...
my_wrapper = wrapper(A)
my_wrapper.shout()
# Expected output:
# > This is a wrapper
# > I AM A
my_wrapper = wrapper(B)
my_wrapper.shout()
# Expected output:
# > This is a wrapper
# > My name is B!
Является ли наследование правильным подходом, если да, я нюхаю в правильном направлении? Любая помощь приветствуется, спасибо:)
Изменить для контекста:
Я собираюсь создать несколько оболочек, чтобы все мои модели ML имели одинаковый API. Как правило, модели из одного и того же пакета (например, sklearn) имеют одинаковый API и должны иметь возможность оборачиваться одной и той же оболочкой. При этом я хочу изменить / добавить функциональность к существующим методам в этих моделях, сохранив то же имя метода.