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

Создание классов и определение объектов в 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:

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.

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

Заключение

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

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

📎📎📎📎📎📎📎📎📎📎