Создание классов и определение объектов в 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.
Теперь в программе используются два объекта, созданных из одного класса.
Заключение
Теперь у вас есть базовые навыки создания классов и объектов, инициализации атрибутов с помощью метода конструктора и работы с несколькими объектами одного класса.
Объектно-ориентированное программирование упрощает работу с кодом, поскольку объекты, созданные для одной программы, могут использоваться в других программах. Сложные объектно-ориентированные программы трудно писать, они требуют тщательного планирования, но в дальнейшем такие программы проще поддерживать.