А давайте поговорим о классах в Python!
Объектно-ориентированный подход наиболее полезен, когда ваш код включает сложные взаимодействия многих объектов. В настоящем производственном коде классы могут иметь десятки атрибутов и методов со сложной логикой, но базовая структура такая же, как и в самом простом классе.
Классы подобны чертежам объектов, описывающим возможное поведение и состояния, которые может иметь каждый объект определенного типа. Например, если вы говорите, что «у каждого клиента будет номер телефона и адрес электронной почты, и он сможет размещать и отменять заказы», вы только что определили класс! Таким образом, вы можете говорить о клиентах в целом. Тогда конкретный объект Customer является просто реализацией этого класса с определенным значением состояния.
В 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».
Управление памятью - важный, но часто упускаемый из виду аспект программирования. При неправильном подходе оно…
Как возникает круговой импорт? Эта ошибка импорта обычно возникает, когда два или более модуля, зависящих…
Вы когда-нибудь оказывались в ситуации, когда скрипт на Python выполняется очень долго и вы задаетесь…
В этом руководстве мы разберем все, что нужно знать о символах перехода на новую строку…
Блок if __name__ == "__main__" в Python позволяет определить код, который будет выполняться только при…
Давайте разберем, как настроить модульные тесты для экземпляров классов. Мы напишем тесты для проверки функциональности…