Начинаем изучать основы объектно-ориентированного программирования на Python.
Классы
Для примера мы создадим класс «Drinks». Внутри будут объекты «Whisky» и «Pepsi». Дальше будем их развивать, смешивать, добавлять свойства и методы. Приступим.
[code]class Drinks: # это класс.
name = «unknown» # это свойство класса, которое будет наследовать объект.
def method (self): # создаем метод. Метод — это та же самая функция.
drink = self.name
print («This drink is » + drink)
#создаем объекты (экземпляры класса), которые будут наследовать свойство класса Drinks
whisky = Drinks()
whisky.name = «Whisky»
pepsi = Drinks()
pepsi.name = «Pepsi»
#self хранит в себе то же самое, что объекты. Передается даже при пустых скобках
whisky.method()
pepsi.method()
Результат
Два объекта могут наследовать один и тот же класс, но они будут меняться вне зависимости друг от друга
Передача аргументов в методы. Изменение свойств
Значения в свойствах класса можно и нужно менять, в зависимости от поставленной задачи. Так же мы можем передавать некоторые аргументы в методы, т.к. это у нас обычная функция. Добавим еще несколько свойств для напитков — литраж и тару
[adace-ad id=»3470″][code]
class Drinks:
name = «unknown»
liter = 500 # добавили объем напитка в миллилитрах (литраж)
volume = 2 # добавили количество бутылок
def method (self):
drink = self.name
print («This drink is » + drink)
def party (self, volume=False): #второй параметр может быть не передан (self передается в любом случае)
if volume == False: # если он не передан
return 500 # то литраж остается тем же
self.liter = self.liter * volume # если передан умножаем на количество бутылок
whisky = Drinks()
whisky.name = «Whisky»
pepsi = Drinks()
pepsi.name = «Pepsi»
whisky.party(4) # если мы берем 4 бутылки
pepsi.party()
print(whisky.liter) # то литраж будет 2000 мл = 2 литра вискарика
print(pepsi.liter)
Результат:
Конструктор класса
Конструктор класса позволяет писать код нашей программы в более компактном и удобном виде, благодаря тому, что аргументы класса можно передавать в одной строчке. Метод-конструктор вызывается с помощью функции __init__. Данный метод-конструктор вызывается автоматически при инициализации экземпляра объекта. Т.е. прописывать его вне класса нет необходимости. Мы можем прописать необходимые аргументы в __init__, а затем прописать их в круглых скобках при вызове класса. Как это выглядит?
[code]class Drinks:
name = «unknown»
liter = 500 # добавили объем напитка в миллилитрах (литраж)
volume = 2 # добавили количество бутылок
def __init__(self, name, volume, overall=False): # создаем конструктор, куда передаем параметры
self.name = name
self.volume = volume
self.overall = self.liter * self.volume
# Каждому объекту из класса мы передаем агрументы метода __init__
whisky = Drinks(«Whisky», 2)
pepsi = Drinks(«Pepsi», 3)
print(whisky.name, pepsi.name)
print(whisky.overall, pepsi.overall)
Результат:
Запомнить: Метод __init__ вызывается при инициализации экземпляра объекта, хотя мы явно не указываем это в коде.
Запомнить: В ООП допускается, разрешается и имеется возможность вызывать метод, который уже был создан в классе из другого метода этого класса (метод внутри метода)
