@Boris19

Использовать контекстный менеджер при наследовании?

Есть класс и метод:
class Test(object):
    def do(self):
        # do something
        # do something else


И есть наследник этого класса
class Test2(Test):
    def do(self):
       # do something other


Но при этом мне нужно чтобы код # do something else из метода do класса Test, выполнился после выполнения do класса Test2. Это можно как-то прозрачно сделать с помощью декоратора или менеджера контекста? так чтобы можно было разные классы-наследники создавать от класса Test, и при вызове их метода do, после его выполнения выполнялся код # do something else.
Может во время инициализации объекта класса Test2 как-то динамически из конструктора Test оборачивать метод do в контекстный менеджер?
  • Вопрос задан
  • 121 просмотр
Пригласить эксперта
Ответы на вопрос 1
planc
@planc
я ничего не понял из подобного описания проблемы и каким боком тут менеджеры контекста, но возможно ты хотел сделать это:

перечитав еще раз :)

class Test:
    def do(self, cb=None):
        print("i am test")
        if callable(cb):
            cb()
        print("i am test")


class Test2(Test):
    def do(self):
        super().do(self.mycb)

    def mycb(self):
        print("i am test2")


t = Test2()
t.do()


i am test
i am test2
i am test


или так:

class Test:
    def do(self):
        print("i am test")
        if hasattr(self, 'mycb'):
            self.mycb()
        print("i am test")


class Test2(Test):

    def mycb(self):
        print("i am test2")


t = Test2()
t.do()
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы