Вызов метода базового класса из базового класса

#python

#питон #python

Вопрос:

Когда я вызываю method1() из внешнего класса, в конечном итоге вместо этого вызывается производный класс method1(). Как я могу заставить его вызвать метод базового класса1? Лучше ли для внутреннего класса иметь init и оттуда вызывать родительский init?

 class OuterClassA
    __init__
       method1()

    def method1(self):
        ....

class InnerClassB(OuterClassA)

    def method1(self):
     ....
  

Ответ №1:

Искажение имени с двойным подчеркиванием в Python предназначено для решения этой проблемы.

Подробности и проработанный пример см.:http://docs.python.org/tutorial/classes.html#private-variables и в http://docs.python.org/reference/expressions.html#atom-identifiers .

 class OuterClassA:
    def __init__(self):
        self.__method1()      # call this class's private copy

    def method1(self):
        ...
    __method1 = method1       # make a private (class local) copy


class InnerClassB(OuterClassA)
    def method1(self):
        ...
  

Ответ №2:

Вызовите базовый класс method1() .

 OuterClassA.method1(someClassBObject)
  

Комментарии:

1. Извините, это не самый предпочтительный подход к проблеме.

2. Предпочтительное решение — не сталкиваться с этим в первую очередь. Запрашивающий решил, что избегание не годится, поэтому остальное выясняет, какое дурацкое решение наименее ужасное.

3. Существуют законные варианты использования, позволяющие подклассу переопределять метод, не прерывая способность родительского элемента выполнять прямые внутренние вызовы.