Вызов суперфункции из дочерней функцииPython

Программы на Python
Ответить
Anonymous
 Вызов суперфункции из дочерней функции

Сообщение Anonymous »

У меня следующая структура:

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

class grandparent(ABC):
@abstractmethod
def get_obj(self):
pass

class ParentBase(grandparent):
def __init__(self, obj1):
self.obj1 = obj1

def get_obj(self,func):
return getattr(self.obj1, func)

def get_base_obj(self):
return super().get_obj('base')

class child1(ParentBase):
def __init__(self, obj1):
super().__init__(obj1)

def get_obj(self):
return super().get_base_obj().child1()

class child2(ParentBase):
def __init__(self, obj1):
super().__init__(obj1)

def get_obj(self):
return super().get_base_obj().child2()

Выполнение этого кода:

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

child_instance = child1(obj1)
child_instance.get_obj()
Выдаст мне ошибку: 2 введенных аргумента, но ожидается 1, потому что get_base_obj в родительском элементе вызывает определение дедушки и бабушки.
Если я изменю функцию на:< /p>

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

def get_base_obj(self, func_name):
return self.get_obj(func)
он ​​вызовет определение дочернего класса, а также выдаст ошибку.
Я хочу, чтобы get_base_obj в родительском классе вызывал get_obj в родительском классе при get_obj вызывается из дочернего класса. Есть ли способ сделать это, или мне нужно сделать родительский.get_obj функцией класса? parentBase — это базовый класс, поэтому инициализация оттуда не будет

Подробнее здесь: https://stackoverflow.com/questions/791 ... d-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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