#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. Существуют законные варианты использования, позволяющие подклассу переопределять метод, не прерывая способность родительского элемента выполнять прямые внутренние вызовы.