Читаем Изучаем Python онлайн бесплатно
Создайте несколько экземпляров, представляющих разных пользователей. Вызовите оба метода для каждого пользователя.
Классы могут использоваться для моделирования многих реальных ситуаций. После того как класс будет написан, разработчик проводит бульшую часть времени за работой с экземплярами, созданными на основе этого класса. Одной из первых задач станет изменение атрибутов, связанных с конкретным экземпляром. Атрибуты экземпляра можно изменять напрямую или же написать методы, изменяющие атрибуты по особым правилам.
Напишем класс, представляющий автомобиль. Этот класс будет содержать информацию о типе машины, а также метод для вывода краткого описания:
car.py
class Car():
. ."""Простая модель автомобиля."""
(1) . .def __init__(self, make, model, year):
. . . ."""Инициализирует атрибуты описания автомобиля."""
. . . .self.make = make
. . . .self.model = model
. . . .self.year = year
. . . .
(2) . .def get_descriptive_name(self):
. . . ."""Возвращает аккуратно отформатированное описание."""
. . . .long_name = str(self.year) + ' ' + self.make + ' ' + self.model
. . . .return long_name.title()
. .
(3)my_new_car = Car('audi', 'a4', 2016)
print(my_new_car.get_descriptive_name())
В точке (1) в классе Car определяется метод __init__(); его список параметров начинается с self, как и в классе Dog. За ним следуют еще три параметра: make, model и year. Метод __init__() получает эти параметры и сохраняет их в атрибутах, которые будут связаны с экземплярами, созданными на основе класса. При создании нового экземпляра Car необходимо указать фирму-производителя, модель и год выпуска для данного экземпляра.
В точке (2) определяется метод get_descriptive_name(), который объединяет год выпуска, фирму-производителя и модель в одну строку с описанием. Это избавит вас от необходимости выводить значение каждого атрибута по отдельности. Для работы со значениями атрибутов в этом методе используется синтаксис self.make, self.model и self.year.
В точке (3) создается экземпляр класса 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
(1) . . . .self.odometer_reading = 0
. . . .
def get_descriptive_name(self):
...
. .
(2) . .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()
Когда Python вызывает метод __init__() для создания нового экземпляра, этот метод сохраняет фирму-производителя, модель и год выпуска в атрибутах, как и в предыдущем случае. Затем Python создает новый атрибут с именем odometer_reading и присваивает ему исходное значение 0 (1) . Также в класс добавляется новый метод read_odometer() (2), который упрощает чтение пробега машины в милях.
Сразу же после создания машины ее пробег равен 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())
(1) my_new_car.odometer_reading = 23
my_new_car.read_odometer()
В точке (1) точечная запись используется для обращения к атрибуту odometer_reading экземпляра и прямого присваивания его значения. Эта строка приказывает Python взять экземпляр my_new_car, найти связанный с ним атрибут odometer_reading и задать значение атрибута равным 23:
2016 Audi A4
This car has 23 miles on it.



