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
. Переменные,
к которым вы обращаетесь через экземпляры, также называются
Достарыңызбен бөлісу: