Python

Новичок в ООП? Узнай, как создавать классы и экземпляры в 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).

def используется для определения функции (или метода, если функция находится внутри класса). По аналогии class используется для определения класса.

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

Первое, что вы заметите внутри класса customer — это метод __init__. Метод __init__ является особым методом для классов в Python. Он вызывается каждый раз при создании класса.

__init__ — это конструктор класса.

Каждый раз при создании нового класса вы вызываете метод __init__ и используете аргумент self.

Переменная self представляет собой экземпляр самого объекта. Некоторые ОО-языки передают эту переменнуюв качестве скрытого параметра для определенных методов, однако Python требует объявления self.

Параметр 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!

Если вы хотите продолжить изучение ООП, то почитайте также про четыре принципа: инкапсуляцию, абстракцию, наследование и полиморфизм. 

Читайте также:


Перевод статьи Emilee Smith: Get started with Object Oriented Programming in Python: Classes and Instances