Module (15%)
Section (25%)

Стек - объектный подход

Конечно, основная идея остается прежней. Мы будем использовать список в качестве хранилища в стеке. Нам нужно только знать, как поместить список в класс.

Давайте начнем с абсолютного начала - так начинается стек в технологии объектного программирования:

class Stack:

Теперь мы ожидаем от него двух вещей:

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

Как это сделать?

В отличие от других языков программирования, в Python нет средств, позволяющих Вам объявить такое свойство просто так.

Вместо этого вам нужно добавить конкретное утверждение или инструкцию. Свойства должны быть добавлены в класс вручную.

 

Как гарантировать, что такое действие происходит каждый раз, когда создается новый стек?

Есть простой способ сделать это - Вы должны оборудовать класс определенной функцией - ее специфика двойственная:

  • она должен быть строго названа;
  • она вызывается неявно, когда создается новый объект.
 

Такая функция называется конструктором, поскольку ее общее назначение - создать новый объект. Конструктор должен знать все о структуре объекта и выполнять все необходимые инициализации.

Давайте добавим очень простой конструктор в новый класс. Посмотрите на фрагмент:

class Stack: def __init__(self): print("Hi!") stack_object = Stack()

А теперь:

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

Код находится в редакторе. Запустите его.

Вот его вывод:

Hi!

output

Обратите внимание - нет никаких следов вызова конструктора внутри кода. Он был вызван неявно и автоматически. Давайте используем это сейчас.



Code

class Stack: # defining the Stack class
def __init__(self): # defining the constructor function
print("Hi!")

stackObject = Stack() # instantiating the object
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×