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