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



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


Глава 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

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




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

    Басты бет