Создание
и использование класса
171
Создание и использование класса
Классы позволяют моделировать практически все что угодно. Начнем с написания
простого класса
Dog
, представляющего собаку — не какую-то конкретную, а собаку
вообще. Что мы знаем о собаках? У них есть кличка и возраст. Также известно, что
большинство собак умеют садиться и перекатываться по команде. Эти два вида
информации (кличка и возраст) и два вида поведения (сидеть и перекатываться)
будут включены в класс
Dog
, потому что они являются общими для большинства
собак. Класс сообщает Python, как создать объект, представляющий собаку. По-
сле того как класс будет написан, мы используем его для создания экземпляров,
каждый из которых представляет одну конкретную собаку.
Создание
класса Dog
В каждом экземпляре, созданном на основе класса
Dog
, будет храниться кличка
(
name
) и возраст (
age
); кроме того, в нем будут присутствовать методы
sit()
и
roll_over()
:
dog.py
❶
class Dog():
❷
"""Простая модель собаки."""
❸
def __init__(self, name, age):
"""Инициализирует атрибуты name и age."""
❹
self.name = name
self.age = age
❺
def sit(self):
"""Собака садится по команде."""
print(f"{self.name} is now sitting.")
def roll_over(self):
"""Собака перекатывается по команде."""
print(f"{self.name} rolled over!")
В этом коде есть много мест, заслуживающих вашего внимания, но не беспокойтесь.
Эта структура неоднократно встретится вам в этой главе, и вы еще успеете к ней
привыкнуть. В
точке
определяется класс с именем
Dog
. По общепринятым согла-
шениям имена, начинающиеся с символа верхнего регистра, в Python обозначают
классы. Круглые скобки в определении класса пусты, потому что класс создается
с нуля. В точке
приведена строка документации с кратким описанием класса.
Метод __init__()
Функция, являющаяся частью класса, называется
методом
. Все, что вы узнали
ранее о функциях, также относится и к методам; единственное практическое раз-
личие — способ вызова методов. Метод
__init__()
в точке
— специальный метод,
172
Глава 9 •
Классы
который автоматически выполняется при создании каждого нового экземпляра на
базе класса
Dog
. Имя метода начинается и заканчивается двумя символами подчер-
кивания; эта схема предотвращает конфликты имен стандартных методов Python
и методов ваших классов. Будьте внимательны: два символа подчеркивания долж-
ны стоять на
каждой
стороне
__init__()
. Если вы поставите только один символ
подчеркивания с каждой стороны, то метод не будет вызываться автоматически
при использовании класса, что может привести к появлению коварных ошибок.
Метод
__init__()
определяется с тремя параметрами:
self
,
name
и
age
. Пара-
метр
self
обязателен в определении метода; он должен предшествовать всем
остальным параметрам. Он должен быть включен в определение, потому что
при будущем вызове метода
__init__()
(для создания экземпляра
Dog
) Python
автоматически передает аргумент
self
. При каждом вызове метода, связанного
с классом, автоматически передается
self
— ссылка на экземпляр; она предо-
ставляет конкретному экземпляру доступ к атрибутам и методам класса. Когда
вы создаете экземпляр
Dog
, Python вызывает метод
__init__()
из класса
Dog
. Мы
передаем
Dog()
кличку и возраст в аргументах; значение
self
передается автома-
тически, так что его передавать не нужно. Каждый раз, когда вы захотите создать
экземпляр на основе класса
Dog
, необходимо предоставить значения только двух
последних
аргументов,
name
и
age
.
Каждая из двух переменных, определяемых в точке
, снабжена префиксом
self
.
Любая переменная с префиксом
self
доступна для каждого метода в классе, и вы
также сможете обращаться к этим переменным в каждом экземпляре, созданном
на основе класса. Конструкция
self.name
=
name
берет значение, хранящееся в па-
раметре
name
, и сохраняет его в переменной
name
, которая затем связывается с соз-
даваемым экземпляром. Процесс также повторяется с
self.age
=
age
. Переменные,
к которым вы
обращаетесь через экземпляры,
также называются
Достарыңызбен бөлісу: