Module (24%)
Section (69%)

Объектный подход: стек с нуля (продолжение)

Во-вторых, давайте добавим два метода. Но позвольте спросить Вас: это действительно добавляет? У нас уже есть эти методы в суперклассе. Можем ли мы сделать что-то подобное?

Да, мы можем. Это означает, что мы собираемся изменить функциональность методов, а не их имена. Можно сказать более точно, что интерфейс (способ обработки объектов) класса остается неизменным при одновременном изменении реализации.

Давайте начнем с реализации функции push. Вот, что мы ожидаем от нее:

  • добавить значение в переменную __sum;
  • поместить значение в стек.
 

Примечание: второе действие уже реализовано внутри суперкласса - так что мы можем использовать это. Кроме того, мы должны использовать его, так как нет другого способа получить доступ к переменной __stackList.

Вот как выглядит метод push в подклассе:

def push(self, val): self.__sum += val Stack.push(self, val)

Обратите внимание, как мы вызывали предыдущую реализацию метода push (который доступен в суперклассе):

  • мы должны указать имя суперкласса; это необходимо для того, чтобы четко указать класс, содержащий метод, чтобы не путать его с любой другой функцией с тем же именем;
  • мы должны указать целевой объект и передать его в качестве первого аргумента (он неявно добавляется к вызову в этом контексте.)

Мы говорим, что метод push был переопределен - то же имя, что и в суперклассе, теперь представляет другую функциональность.



Code

class Stack:
def __init__(self):
self.__stackList = []

def push(self, val):
self.__stackList.append(val)

def pop(self):
val = self.__stackList[-1]
del self.__stackList[-1]
return val


class AddingStack(Stack):
def __init__(self):
Stack.__init__(self)
self.__sum = 0


# Enter code here.
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×