Создание классов и определение объектов в Python 3

Python – это объектно-ориентированный язык программирования. Объектно-ориентированное программирование (ООП) сосредоточено на создании многоразовых шаблонов кода, в отличие от процедурного программирования, в котором основное внимание уделяется упорядоченным последовательностям инструкциям. При работе над сложными программами объектно-ориентированное программирование позволяет повторно использовать тот или иной шаблон кода и писать более читабельный код, который проще обслуживать.

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

  • Класс – это шаблон объекта. Он определяет набор методов и атрибутов, которые будут применяться ко всем объектам, созданным из этого класса.
  • Объект – экземпляр класса, то есть версия класса, через которую он реализуется в программе.

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

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

Классы

Класс – это прототип объекта.

В коде классы определяются ключевым словом class.

Создайте файл shark.py. Попробуйте определить класс Shark с двумя функциями:

class Shark:
def swim(self):
print("The shark is swimming.")
def be_ predator(self):
print("The shark is a predator.")

Определяемые в классе функции называются методами.

В данном случае в качестве аргумента используется слово self – оно ссылается на объекты, основанные на этом классе. Для этого параметр self должен всегда быть первым в функции (но не обязательно единственным её параметром).

Новый класс Shark пока что не создал ни одного объекта Shark. То есть, если вы запустите программу shark.py, ничего не произойдёт.

Теперь у вас есть шаблон для создания объектов.

Объекты

Объект – это экземпляр класса. Используйте класс Shark для создания объекта jimmy.

jimmy = Shark()

Вы инициализировали объект jimmy как экземпляр класса.

Теперь добавьте методы класса Shark в объект jimmy:

jimmy = Shark()
jimmy.swim()
jimmy.be_predator()

Теперь объект jimmy, созданный на основе класса Shark, использует методы swim() и be_awesome(), которые были вызваны с помощью оператора-точки. Этот оператор позволяет сослаться на атрибут объекта.  В этом случае атрибут является методом, и он вызывается со скобками, как любая обычная функция.

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

При вызове методов объект jimmy автоматически передается с помощью оператора-точки.

Добавьте объект в файл shark.py:

class Shark:
def swim(self):
print("The shark is swimming.")
def be_ predator(self):
print("The shark is a predator.")
def main():
jimmy = Shark()
jimmy.swim()
jimmy.be_ predator()
if __name__ == "__main__":
main()

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

python shark.py
The shark is swimming.
The shark is being awesome.

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

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

class Shark:
def __init__(self):
print("This is the constructor method.")

Добавьте метод __init__ в класс Shark; после этого программа выведет следующий результат (без каких-либо изменений в объекте).

This is the constructor method.
The shark is swimming.
The shark is a predator.

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

Вместо приведённого выше примера попробуйте создать метод конструктора, который использует переменную name, которая будет присваивать имена объектам. Передайте переменную name как параметр и укажите, что self.name равно name. Добавьте в shark.py:

class Shark:
def __init__(self, name):
self.name = name

После этого нужно отредактировать функции класса, чтобы они ссылались на переменную:

class Shark:
def __init__(self, name):
self.name = name
def swim(self):
# Ссылка на переменную name
print(self.name + " is swimming.")
def be_predator(self):
# Ссылка на переменную name
print(self.name + " is a predator.")

Теперь можно указать, что объект jimmy передаёт переменной name значение Jimmy.

class Shark:
def __init__(self, name):
self.name = name
def swim(self):
print(self.name + " is swimming.")
def be_ predator(self):
print(self.name + " is a predator.")
def main():
# Set name of Shark object
jimmy = Shark("Jimmy")
jimmy.swim()
jimmy.be_awesome()
if __name__ == "__main__":
main()

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

python shark.py
Jimmy is swimming.
Jimmy is a predator.

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

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

Чтобы добавить другой параметр, например, age, можно создать ещё один метод __init__.

class Shark:
def __init__(self, name, age):
self.name = name
self.age = age

Создавая объект jimmy, можно указать возраст, например:

jimmy = Shark("Jimmy", 5)

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

Метод конструктора позволяет инициализировать определенные атрибуты объекта.

Работа с несколькими объектами

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

Чтобы лучше понять, как это работает, добавьте в программу ещё один объект на основе класса Shark.

class Shark:
def __init__(self, name):
self.name = name
def swim(self):
print(self.name + " is swimming.")
def be_ predator(self):
print(self.name + " is a predator.")
def main():
jimmy = Shark("Jimmy")
jimmy.be_ predator()
stevie = Shark("Stevie")
stevie.swim()
if __name__ == "__main__":
main()

Теперь в программе есть два объекта: jimmy и stevie.

В данном примере метод be_predator используется в объекте jimmy, а swim – в объекте stevie.

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

python shark.py
Jimmy is a predator.
Stevie is swimming.

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

Заключение

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

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

Читайте также:

Tags: ,

Добавить комментарий