Изучаем классы в Python: построение классов и определение объектов в Python 3

Python - это объектно-ориентированный язык программирования. Одним из наиболее важных понятий в ООП является различие между классами и объектами:

  • Класс - образец, созданный программистом для объекта. Он определяет набор атрибутов, которые будут характеризовать любой объект, который создается из этого класса.
  • Объект - экземпляр класса. Это реализованная версия класса, где он проявляется в программе.
    В этой статье мы рассмотрим создание классов, экземпляров объектов, инициализацию атрибутов с помощью метода конструктора.А также работу с несколькими объектами одного класса.

Классы в Python

Классы похожи на образец или прототип для создания объектов. Они определяются с помощью ключевого слова class.

Давайте определим класс Shark, который имеет две связанные с ним функции:

shark.py

classShark:
defswim(self):
        print("The shark is swimming.")

defbe_awesome(self):
        print("The shark is being awesome.")

Поскольку эти функции объявлены под классом Shark, они называются методами. Методы - это особый вид функции, который определен внутри класса.

Аргументом этих функций является слово self, которое является ссылкой на объекты, созданные на основе этого класса. Чтобы ссылаться на экземпляры (или объекты) класса, self всегда будет первым параметром.

Определение этого класса создает шаблон для объекта Shark, который мы сможем определить позже. То есть, если вы запустите программу, приведенную выше, ничего не будет возвращено.

Объекты

Объект является экземпляром класса. Мы можем взять класс Shark, определенный выше, и использовать его для создания объекта или экземпляра класса.

Создадим объект Shark с именем sammy:

sammy = Shark()

Мы инициализировали объект sammy как экземпляр класса, установив его равным Shark().

Теперь используем два метода с объектом Shark sammy:

sammy = Shark()
sammy.swim()
sammy.be_awesome()

Объект sammy использует два метода - swim() и be_awesome(). Мы вызвали их с помощью оператора «.», который ссылается на атрибут объекта. В этом случае атрибут является методом, и он вызывается с круглыми скобками.

Поскольку ключевое слово self было параметром методов класса Shark, объект sammy передается методам. Параметр self позволяет методам ссылаться на атрибуты объекта.

Но когда мы вызываем методы, в круглых скобках ничего не передается. Объект sammy автоматически передается с помощью оператора «.» (точки).

Добавим объект в программе:

shark.py

classShark:
defswim(self):
        print("The shark is swimming.")

defbe_awesome(self):
        print("The shark is being awesome.")


defmain():
    sammy = Shark()
sammy.swim()
sammy.be_awesome()

if __name__ == "__main__":
    main()

Запустим программу, чтобы узнать, что она делает:

python shark.py

Вывод
The shark is swimming.
The shark is being awesome.

Объект sammy вызывает два метода в функции main(), указывая запустить эти методы.

Метод конструктора

Для инициализации данных используется метод конструктора. Он запускается, когдасоздается объект класса. Он также известен, как метод __init__. Это будет первое определение класса:

classShark:
def__init__(self):
        print("This is the constructor method.")

Если в наш пример добавить к классу Shark указанный метод__init__, программа выведет следующее без внесения изменений в экземпляр sammy:

Вывод
This is the constructor method.
The shark is swimming.
The shark is being awesome.

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

Создадим метод конструктора, который использует переменную name. Ее мы применим для присвоения имен объектам. Мы передадим name в качестве параметра и зададим self.name, равное name:

shark.py

classShark:
def__init__(self, name):
        self.name = name

Можно изменить строки в функциях, чтобы ссылаться на имена:

shark.py

classShark:
def__init__(self, name):
        self.name = name

defswim(self):
# Ссылка на имя
        print(self.name + " is swimming.")

defbe_awesome(self):
# Ссылка на имя
        print(self.name + " is being awesome.")

Также мы можем установить имя объекта Shark sammy равным «Sammy», передав его, как параметр класса Shark:

shark.py

classShark:
def__init__(self, name):
        self.name = name

defswim(self):
        print(self.name + " is swimming.")

defbe_awesome(self):
        print(self.name + " is being awesome.")


defmain():
# Устанавливаем имя объекта Shark
    sammy = Shark("Sammy")
sammy.swim()
sammy.be_awesome()

if __name__ == "__main__":
    main()

Теперь запустим программу:

python shark.py

Вывод
Sammy is swimming.
Sammy is being awesome.

Имя, которое мы передали объекту, выводится. Мы определили метод __init__ с именем параметра (вместе с ключевым словом self) и передали переменную внутри метода.

Метод конструктора инициализируется автоматически, поэтому его не нужно явно вызывать. Достаточно при создании экземпляра класса передать аргументы в круглых скобках, следующих за именем класса.

Если нужно было бы добавить еще один параметр, например возраст, мы могли сделать это, передав его методу __init__:

classShark:
def__init__(self, name, age):
        self.name = name
self.age = age

При создании объекта sammy можно передать возраст Сэмми:

sammy = Shark("Sammy", 5)

Чтобы использовать параметр age, также нужно будет создать метод в классе. Методы конструктора позволяют инициализировать определенные атрибуты объекта.

Классы Python 3: работа с более чем одним объектом

Классы позволяют создавать много похожих объектов на основе одного образца.
Чтобы понять, как это работает, добавим еще один объект Shark в нашу программу:

shark.py

classShark:
def__init__(self, name):
        self.name = name

defswim(self):
        print(self.name + " is swimming.")

defbe_awesome(self):
        print(self.name + " is being awesome.")

defmain():
    sammy = Shark("Sammy")
sammy.be_awesome()
    stevie = Shark("Stevie")
stevie.swim()

if __name__ == "__main__":
  main()

Мы создали второй объект Shark с именем stevie, и передали ему имя «Stevie». В этом примере используются методы be_awesome() с sammy и метод swim() со stevie.

Запустим программу:

python shark.py

Вывод
Sammy is being awesome.
Stevie is swimming.

Результат показывает, что мы используем два разных объекта: объект sammy и объект stevie. Они оба относятся к классу Shark.

Классы позволяют создавать более одного объекта по одному и тому же шаблону, не создавая каждый из них с нуля.

Заключение

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

Вадим Дворниковавтор-переводчик статьи «How To Construct Classes and Define Objects in Python 3»