Anastasia_K
@Anastasia_K

Как вызвать метод родителя из переменной python?

from libs.ConfigManager import ConfigManager
файл раз, test.py
class TestMe():
config = ConfigManager()

def runme(self):
print('alive')
asdf = TestMe()
asdf.config.test()

файл два, libs/ConfigManager.py
class ConfigManager:
def test(self):
super().runme()

результат ожидаем:
AttributeError: 'super' object has no attribute 'runme'
вопрос, как из ConfigManager вызвать метод из родительского TestMe?
  • Вопрос задан
  • 876 просмотров
Решения вопроса 1
Sly_tom_cat
@Sly_tom_cat
.
У вас TestMe - не родитель ConfigManager, а владелец свойства config (являющегося экземпляром класса ConfigManager).

Что бы TestMe был родителем ConfigManager, ConfigManager надо объявлять так:

class ConfigManager(TestMe):

Тогда будет возможность вызвать runme() как метод самого ConfigManager
class ConfigManager(TestMe):

    def test(self):
        self.runme()


seper() нужно только тогда, когда нужно вызвать переопределенный метод родителя.

class ConfigManager(TestMe):

    def runme(self):
        super(self).runme()


Если же хочется именно так как у вас (когда ConfigManager является значением свойства класса TestMe, то тогда в конструктор ConfigManager нужно передать владельца этого свойства параметром, тогда внутри ConfigManager можно будет вызвать метод владельца.

class TestMe():

    config = ConfigManager(self)

    def runme(self):
        print('alive')

class ConfigManager():

    def __init__(self, owner):
        self.owner = owner   # запоминаем хозяина

    def test(self):
        self.owner.runme()   # вызываем метод хозяина
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
20 сент. 2021, в 18:13
100000 руб./за проект
20 сент. 2021, в 17:46
30000 руб./за проект
20 сент. 2021, в 16:07
140000 руб./за проект