Глава 9 • Классы
В точке
в классе
Car
определяется метод
__init__()
; его список параметров на-
чинается с
self
, как и в классе
Dog
. За ним следуют еще три параметра:
make
,
model
и
year
. Метод
__init__()
получает эти параметры и сохраняет их в атрибутах, ко-
торые будут связаны с экземплярами, созданными на основе класса. При создании
нового экземпляра
Car
необходимо указать фирму-производителя, модель и год
выпуска для данного экземпляра.
В точке
определяется метод
get_descriptive_name()
, который объединяет год
выпуска, фирму-производителя и модель в одну строку с описанием. Это избавит
вас от необходимости выводить значение каждого атрибута по отдельности. Для
работы со значениями атрибутов в этом методе используется синтаксис
self.make
,
self.model
и
self.year
.
В точке
создается экземпляр класса
Car
, который сохраняется в переменной
my_new_car
. Затем вызов метода
get_descriptive_name()
показывает, с какой ма-
шиной работает программа:
2016 Audi A4
Чтобы класс был более интересным, добавим атрибут, изменяющийся со време-
нем, — в нем будет храниться пробег машины в милях.
Назначение атрибуту значения по умолчанию
Каждый атрибут класса должен иметь исходное значение, даже если оно равно
0 или пустой строке. В некоторых случаях (например, при задании значений по
умолчанию) это исходное значение есть смысл задавать в теле метода
__init__()
;
в таком случае передавать параметр для этого атрибута при создании объекта
не обязательно.
Добавим атрибут с именем
odometer_reading
, исходное значение которого всегда
равно 0. Также в класс будет включен метод
read_odometer()
для чтения текущих
показаний одометра:
class Car():
def __init__(self, make, model, year):
"""Инициализирует атрибуты описания автомобиля."""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
...
def read_odometer(self):
"""Выводит пробег машины в милях."""
print("This car has " + str(self.odometer_reading) + " miles on it.")
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
my_new_car.read_odometer()
Работа с классами и экземплярами
167
Когда Python вызывает метод
__init__()
для создания нового экземпляра, этот
метод сохраняет фирму-производителя, модель и год выпуска в атрибутах, как
и в предыдущем случае. Затем Python создает новый атрибут с именем
odometer_
reading
и присваивает ему исходное значение 0
. Также в класс добавляется
новый метод
read_odometer()
, который упрощает чтение пробега машины
в милях.
Сразу же после создания машины ее пробег равен 0:
2016 Audi A4
This car has 0 miles on it.
Впрочем, у продаваемых машин одометр редко показывает ровно 0, поэтому нам
понадобится способ изменения значения этого атрибута.
Изменение значений атрибутов
Значение атрибута можно изменить одним из трех способов: изменить его прямо
в экземпляре, задать значение при помощи метода или изменить его с приращением
(то есть прибавлением определенной величины) при помощи метода. Рассмотрим
все эти способы.
Прямое изменение значения атрибута
Чтобы изменить значение атрибута, проще всего обратиться к нему прямо через эк-
земпляр. В следующем примере на одометре напрямую выставляется значение 23:
class Car():
...
my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23
my_new_car.read_odometer()
В точке
точечная запись используется для обращения к атрибуту
odometer_
reading
экземпляра и прямого присваивания его значения. Эта строка приказывает
Python взять экземпляр
my_new_car
, найти связанный с ним атрибут
odometer_
reading
и задать значение атрибута равным 23:
2016 Audi A4
This car has 23 miles on it.
Иногда подобные прямые обращения к атрибутам допустимы, но чаще разработчик
пишет вспомогательный метод, который изменяет значение за него.
Изменение значения атрибута с использованием метода
В класс можно включить методы, которые изменяют некоторые атрибуты за вас.
Вместо того чтобы изменять атрибут напрямую, вы передаете новое значение ме-
тоду, который берет обновление атрибута на себя.
168
Достарыңызбен бөлісу: |