Классы в Python

А давайте поговорим о классах в Python!

Объектно-ориентированный подход наиболее полезен, когда ваш код включает сложные взаимодействия многих объектов. В настоящем производственном коде классы могут иметь десятки атрибутов и методов со сложной логикой, но базовая структура такая же, как и в самом простом классе.

Классы подобны чертежам объектов, описывающим возможное поведение и состояния, которые может иметь каждый объект определенного типа. Например, если вы говорите, что «у каждого клиента будет номер телефона и адрес электронной почты, и он сможет размещать и отменять заказы», ​​вы только что определили класс! Таким образом, вы можете говорить о клиентах в целом. Тогда конкретный объект Customer является просто реализацией этого класса с определенным значением состояния.

 классы в python

Поиск классов Python

В Python все является объектом. Числа, строки, датафреймы и даже функции являются объектами. В частности, все, с чем вы имеете дело в Python, имеет класс — шаблон, с которым под капотом связан этот объект. Благодаря наличию этих унифицированных интерфейсов вы можете, например, использовать любой DataFrame одним и тем же образом.

Вы можете вызвать функцию type() для любого объекта Python, чтобы узнать его класс. Например, класс массива numpy на самом деле называется ndarray (для n-мерного массива). Это показано в коде ниже:

import numpy as np
a = np.array([1,2,3,4])
print(type(a))
# numpy.ndarray

Классы включают информацию о состоянии объекта и его поведении. Информация о состоянии объекта в Python содержится в атрибутах, а информация о его поведении — в методах.

[python_ad_block]

Атрибуты и методы

Давайте возьмем массив numpy. Мы уже использовали некоторые его методы и атрибуты!

К примеру, у каждого массива numpy есть атрибут shape, к которому вы можете получить доступ, указав имя массива, за которым следуют точка и название атрибута shape.

Состояние <—> Атрибуты

Выглядеть это будет следующим образом:

import numpy as np
a = np.array([1,2,3,4])
# shape attribute
a.shape
# (4,)

У массива numpy также есть такие методы, как max и reshape, которые точно также доступны через точку.

Поведение <—> Методы

Использование метода для класса массивов numpy будет выглядеть, к примеру, так:

import numpy as np
a = np.array([1,2,3,4])
# reshape method
a.reshape(2,2)
# array([[1, 2],
#        [3, 4]])

Создание вашего первого класса

Время написать свой первый класс! В этом упражнении мы создадим пустой класс Employee. Затем создадим объект emp класса Employee, вызвав наш класс Employee(). Выглядеть это будет следующим образом:

# Create an empty class Employee
class Employee:
    pass
# Create an object emp of class Employee
emp = Employee()

Отлично! А теперь попробуйте распечатать атрибут .name объекта emp в консоли. Что получается?

emp.name

# Traceback (most recent call last):
#   File "main.py", line 6, in <module>
#     emp.name
# AttributeError: 'Employee' object has no attribute 'name'

Код выдаст вам ошибку, потому что атрибут .name не существует. И это действительно так, ведь мы не задали такой атрибут для нашего класса Employee.

Давайте дополним наш код следующим образом:

class Employee:
    
    def __init__(self, name):
        self.name = name
# Create an object emp of class Employee
emp = Employee('John')

print(emp.name)

А теперь давайте снова попробуем вывести атрибут .name:

John

Вуаля! Всё работает. Мы получили имя нашего работника John. Ведь в этот раз мы сами задали атрибут name для нашего класса Employee.

Однако мы можем пойти дальше и написать функцию, которая позволит нам изменить имя нашего сотрудника. Выглядеть это может следующим образом:

class Employee:
    
    def __init__(self, name):
        self.name = name
        
    def set_name(self, new_name):
        self.name = new_name
  
emp = Employee('John')
emp.set_name('Korel Rossi')
print(emp.name)

Давайте запустим наш код и увидим, что теперь значение атрибута .name изменилось на следующее:

Korel Rossi

Заключение

Итак, сегодня мы поговорили про классы в Python. Обсудили основы того, что такое класс и как его создать. Кроме того, мы также разобрали, что такое атрибуты и методы класса.

Надеемся, данная статья была вам полезна! Успехов в написании кода!

Перевод статьи «Python Classes».