Новичок в ООП? Узнай, как создавать классы и экземпляры в Python
Про объектно-ориентированное программирование в Python писали многие. Большинство специалистов по обработке данных, в том числе и я, сталкиваются с ситуациями, когда приходится писать функциональный код –часто в небольших скриптах или прототипах. Я работаю в этой сфере уже 3 года (а до этого еще пару лет была аналитиком данных), и до сих пор мне не хватало практического опыта в ООП.
Многие специалисты могут работать годами без необходимости писать код по принципам ООП.
Есть даже весомые доводы против реализации принципов ООП, которые в основном касаются высоких затрат на обслуживание кода и возрастающей сложностью в работе.
Но по мере развития отрасли специалисты по обработке данных сталкиваются с необходимостью написания кода промышленного качества и повышения взаимодействия с инженерными командами. Вот здесь и пригодятся базовые знания ООП и умение создавать классы и методы.
Если вы хотите поучаствовать в проектах в области науки о данных с открытым кодом, то, скорее всего, вам придется работать с объектами. Тогда и понадобятся знания ООП!
Шаг 1: создаем свой первый класс в Python
Основная идея ООП заключается в том, что у нас есть некие объекты, которые выполняют отдельные и простые задачи, а вместе они составляют сложную компьютерную программу.
Изучение ООП начинается с понимания классов. Вот общепринятое определение: классы — это «заготовки для создания объектов». Класс — это логическая структуризация данных и методов (методы равносильны функциям).
Зачастую классы основываются на объектах, которые окружают нас в деловой среде: клиенты, товары, сотрудники.
В сфере финансовых услуг мы храним и работаем с информацией о клиентах. Поэтому давайте создадим простой класс под названием «customer»:
class Customer:
def __init__(self, first, last, mobile, monthly):
self.first = first
self.last = last
self.mobile = mobile
self.fullname = first + ' ' + last
self.monthly = monthly
В ООП у нас есть ключевое слово class (специалисты знакомы с функциональным эквивалентом этого слова — def).
При определении класса customer мы не создаем в нем никаких клиентов, а делаем заготовку для создания клиентов-объектов.
Первое, что вы заметите внутри класса customer — это метод __init__. Метод __init__ является особым методом для классов в Python. Он вызывается каждый раз при создании класса.
Каждый раз при создании нового класса вы вызываете метод __init__ и используете аргумент self.
Переменная self представляет собой экземпляр самого объекта. Некоторые ОО-языки передают эту переменнуюв качестве скрытого параметра для определенных методов, однако Python требует объявления self.
Как только мы определили метод __init__ и указали параметр self, начинаем перечислять остальные параметры/аргументы, которые используются в методе __init__. В нашем примере это first, last, mobile и monthly.
Так мы создали наш первый класс customer. Теперь добавим экземпляры этого класса.
Шаг 2: экземпляры и методы
В объектно-ориентированном программировании экземпляр — это конкретное представление какого-либо объекта. Объект — это некое собирательное понятие, а экземпляром считается отдельный объект, созданный в памяти. Как правило, свойствам экземпляра присваиваются определенные значения, которые будут отличать его от других экземпляров этого типа объекта.
Создание экземпляра
В коде ниже мы создаем экземпляр под названием cust1. Вы будете создавать такой экземпляр каждый раз при сохранении информации о новом клиенте.
cust1 = Customer('Emilee', 'Smith', '0821231234', 20000)
- cust1 — экземпляр;
- customer — класс.
Создание метода
Методы — это то же самое, что и функции, с той лишь разницей, что они находятся внутри класса. Давайте создадим простой метод annual внутри класса customer из нашего примера. Он будет брать ежемесячную зарплату определенного клиента и высчитывать его годовой доход.
class Customer:
def __init__(self, first, last, mobile, monthly):
self.first = first
self.last = last
self.mobile = mobile
self.fullname = first + ' ' + last
self.monthly = monthly
def annual(self):
self.salary = self.monthly*12
return '{0} {1}'.format(self.fullname, self.salary)
Каждый метод внутри класса автоматически принимает экземпляр в качестве первого аргумента. Это означает, что вы передаете аргумент self в скобках. Если прописать self без скобок, то при его вызове появится ошибка.
Чтобы посмотреть, что происходит с методом annual, напишем следующее:
print(cust1.annual())
>> Emilee Smith 240000
Полезный совет: для вызова атрибута в Python (например, fullname в классе customer) напишите следующее:
print(cust1.fullname)
>> Emilee Smith
При вызове метода (а не атрибута) он заключается в скобки. См. выше, как это делалось с annual.
Вы создали новый класс customer, экземпляр cust1 и метод annual. Это первые практические блоки по написанию ООП-кода на Python!
Если вы хотите продолжить изучение ООП, то почитайте также про четыре принципа: инкапсуляцию, абстракцию, наследование и полиморфизм.
Читайте также:
- Овладей Python, создавая реальные приложения. Часть 1
- Полезные Python модули, которыми мало кто пользуется
- Полезные хитрости на Python от А до Я
Перевод статьи Emilee Smith: Get started with Object Oriented Programming in Python: Classes and Instances