Книга «Изучаем Python»



Pdf көрінісі
бет100/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   96   97   98   99   100   101   102   103   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )


Глава 9 • Классы
Метод 
__init__()
определяется с тремя параметрами: 
self

name
и 
age
. Пара-
метр 
self
обязателен в определении метода; он должен предшествовать всем 
остальным параметрам. Он должен быть включен в определение для того, чтобы 
при будущем вызове метода 
__init__()
(для создания экземпляра 
Dog
) автомати-
чески передавался аргумент 
self
. При каждом вызове метода, связанного с клас-
сом, автоматически передается 
self
— ссылка на экземпляр; она предоставляет 
конкретному экземпляру доступ к атрибутам и методам класса. Когда вы создаете 
экземпляр 
Dog
, Python вызывает метод 
__init__()
из класса 
Dog
. Мы передаем 
Dog()
кличку и возраст в аргументах; значение 
self
передается автоматически, так 
что его передавать не нужно. Каждый раз, когда вы захотите создать экземпляр 
на основе класса 
Dog
, необходимо предоставить значения только двух последних 
аргументов 
name
и 
age
.
Каждая из двух переменных, определяемых в точке 

, имеет префикс 
self
. Лю-
бая переменная с префиксом 
self
доступна для каждого метода в классе, и вы 
также сможете обращаться к этим переменным в каждом экземпляре, созданном 
на основе класса. Конструкция 
self.name
=
name
берет значение, хранящееся 
в параметре 
name
, и сохраняет его в переменной 
name
, которая затем связыва-
ется с создаваемым экземпляром. Процесс также повторяется с 
self.age
=
age

Переменные, к которым вы обращаетесь через экземпляры, тоже называются 
атрибутами.
В классе 
Dog
также определяются два метода: 
sit()
и 
roll_over()

. Так как 
этим методам не нужна дополнительная информация (кличка или возраст), они 
определяются с единственным параметром 
self
. Экземпляры, которые будут 
созданы позднее, смогут вызывать эти методы. Пока методы 
sit()
и 
roll_over()
ограничиваются простым выводом сообщения о том, что собака садится или 
перекатывается. Тем не менее концепцию легко расширить для практического 
применения: если бы этот класс был частью компьютерной игры, то эти методы 
вполне могли бы содержать код для создания анимации садящейся или пере-
катывающейся собаки. А если бы класс был написан для управления роботом, 
то методы могли бы управлять механизмами, заставляющими робота-собаку 
выполнить соответствующую команду.
Создание классов в Python 2 .7
При создании классов в Python 2.7 необходимо внести одно незначительное из-
менение — заключить в круглые скобки ключевое слово 
object
:
class ClassName(object):
...
В этом случае поведение классов Python 2.7 будет приближено к поведению клас-
сов Python 3, что упрощает вашу работу в целом.
Скажем, в Python 2.7 класс 
Dog
будет определяться следующим образом:
class Dog(object):
...


Создание и использование класса
163
Создание экземпляра класса
Считайте, что класс — это своего рода инструкция по созданию экземпляров. Со-
ответственно, класс 
Dog
— инструкция по созданию экземпляров, представляющих 
конкретных собак.
Создадим экземпляр, представляющий конкретную собаку:
class Dog():
...
 
my_dog = Dog('willie', 6)
 
print("My dog's name is " + my_dog.name.title() + ".")
 
print("My dog is " + str(my_dog.age) + " years old.")
Использованный в данном случае класс 
Dog
был написан в предыдущем при-
мере. В точке 

мы приказываем Python создать экземпляр собаки с кличкой 
'willie'
и возрастом 6. В процессе обработки этой строки Python вызывает ме-
тод 
__init__()
класса 
Dog
с аргументами 
'willie'
и 6. Метод 
__init__()
создает 
экземпляр, представляющий конкретную собаку, и присваивает его атрибутам 
name
и 
age
переданные значения. Метод 
__init__()
не содержит явной команды 
return

но Python автоматически возвращает экземпляр, представляющий собаку. Этот 
экземпляр сохраняется в переменной 
my_dog
. Здесь нелишне вспомнить соглаше-
ния по записи имен: обычно считается, что имя, начинающееся с символа верхнего 
регистра (например, 
Dog
), обозначает класс, а имя, записанное в нижнем регистре 
(например, 
my_dog
), обозначает отдельный экземпляр, созданный на базе класса.
Обращение к атрибутам
Для обращения к атрибутам экземпляра используется «точечная» запись. В стро-
ке 

мы обращаемся к значению атрибута 
name
экземпляра 
my_dog
:
my_dog.name
Точечная запись часто используется в Python. Этот синтаксис показывает, как 
Python ищет значения атрибутов. В данном случае Python обращается к экзем-
пляру 
my_dog
и ищет атрибут 
name
, связанный с экземпляром 
my_dog
. Это тот же 
атрибут, который обозначался 
self.name
в классе 
Dog
. В точке 

тот же прием ис-
пользуется для работы с атрибутом 
age
. В первой команде 
print
вызов 
my_dog.name.
title()
записывает 
'willie'
(значение атрибута 
name
экземпляра 
my_dog
) с символа 
верхнего регистра. Во второй команде 
print
вызов 
str(my_dog.age)
преобразует 6, 
значение атрибута 
age
экземпляра 
my_dog
, в строку.
Пример выводит сводку известных фактов о 
my_dog
:
My dog's name is Willie.
My dog is 6 years old.
Вызов методов
После создания экземпляра на основе класса 
Dog
можно применять точечную за-
пись для вызова любых методов, определенных в 
Dog
:


164

Достарыңызбен бөлісу:
1   ...   96   97   98   99   100   101   102   103   ...   266




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет