Не допускайте вызова метода, вызываемого в родительском конструкторе, в дочернем конструкторе - PullRequest
1 голос
/ 11 февраля 2020

Предположим, у меня есть родительский класс и дочерний класс, который наследуется от родительского.

class Parent:
    def __init__(self)
    stubborn()

class Child():
      def __init__(self):
      super().__init__(self)

Я не хочу, чтобы упрямый метод вызывался всякий раз, когда я вызываю родительский конструктор в детском классе. Как мне подойти к этому?

Ответы [ 2 ]

2 голосов
/ 11 февраля 2020

Вы можете определить classmethod из Parent, который проверяет, находитесь ли вы в Parent, а затем использовать его, чтобы определить, следует ли звонить stubborn

class Parent:
    def __init__(self):
        if self.is_parent():
            self.stubborn()
    @classmethod
    def is_parent(cls):
        return cls is Parent
    def stubborn(self):
        print("stubborn called")

class Child(Parent): pass

p = Parent() # stubborn called
c = Child() # no output
0 голосов
/ 11 февраля 2020

Вы не сможете ничего с этим сделать в parent.__init__(), фактически не изменив эту функцию или stubborn().

Но, будучи ребенком, вы можете помешать выполнению метода stubborn() что-нибудь важное, временно сделав его заглушкой:

class Child():
    def __init__(self):
        old_stubborn = self.stubborn
        self.stubborn = lambda:None  # stub function that does nothing
        super().__init__(self)
        # put stubborn() back to normal
        self.stubborn = old_stubborn
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...