Стек - объектный подход
Конечно, основная идея остается прежней. Мы будем использовать список в качестве хранилища в стеке. Нам нужно только знать, как поместить список в класс.
Давайте начнем с абсолютного начала - так начинается стек в технологии объектного программирования:
class Stack:
Теперь мы ожидаем от него двух вещей:
- мы хотим, чтобы у класса было одно свойство в качестве хранилища стека - мы должны "установить" список внутри каждого объекта класса (примечание: у каждого объекта должен быть свой собственный список - список не должен использоваться в разных стеках);
- и мы хотим, чтобы список был скрыт от глаз пользователей класса.
Как это сделать?
В отличие от других языков программирования, в Python нет средств, позволяющих Вам объявить такое свойство просто так.
Вместо этого вам нужно добавить конкретное утверждение или инструкцию. Свойства должны быть добавлены в класс вручную.
Как гарантировать, что такое действие происходит каждый раз, когда создается новый стек?
Есть простой способ сделать это - Вы должны оборудовать класс определенной функцией - ее специфика двойственная:
- она должен быть строго названа;
- она вызывается неявно, когда создается новый объект.
Такая функция называется конструктором, поскольку ее общее назначение - создать новый объект. Конструктор должен знать все о структуре объекта и выполнять все необходимые инициализации.
Давайте добавим очень простой конструктор в новый класс. Посмотрите на фрагмент:
class Stack:
def __init__(self):
print("Hi!")
stack_object = Stack()
А теперь:
- имя конструктора всегда
__init__
; - он должен иметь хотя бы один параметр (мы обсудим это позже); параметр используется для представления вновь созданного объекта - вы можете использовать этот параметр для управления объектом и для обогащения его необходимыми свойствами; Вы скоро этим воспользуетесь;
- примечание: обязательный параметр обычно называется
self
- это всего лишь соглашение, но Вы должны следовать ему - это упрощает процесс чтения и понимания Вашего кода.
Код находится в редакторе. Запустите его.
Вот его вывод:
Hi!
output
Обратите внимание - нет никаких следов вызова конструктора внутри кода. Он был вызван неявно и автоматически. Давайте используем это сейчас.