УПРАЖНЕНИЯ
9.6. Киоск с мороженым:
киоск с мороженым — особая разновидность ресторана. Напиши-
те класс IceCreamStand, наследующий от класса Restaurant из упражнения 9.1 (с. 175) или
упражнения 9.4 (с. 180). Подойдет любая версия класса; просто выберите ту, которая вам
больше нравится. Добавьте атрибут с именем
flavors
для хранения списка сортов мороже-
ного. Напишите метод, который выводит этот список. Создайте экземпляр
IceCreamStand
и вызовите этот метод.
9.7. Администратор:
администратор — особая разновидность пользователя. Напишите
класс с именем Admin, наследующий от класса
User
из упражнения 9.3 или упражнения 9.5
(с. 180). Добавьте атрибут
privileges
для хранения списка строк вида
"разрешено
добавлять
сообщения"
,
"разрешено
удалять
пользователей"
,
"разрешено
банить
пользователей"
и т. д. На-
пишите метод
show_privileges()
для вывода набора привилегий администратора. Создай-
те экземпляр
Admin
и вызовите свой метод.
9.8. Привилегии:
напишите класс
Privileges
. Класс должен содержать всего один атри-
бут
privileges
со списком строк из упражнения 9.7. Переместите метод
show_privileges()
в этот класс. Создайте экземпляр
Privileges
как атрибут класса
Admin
. Создайте новый эк-
земпляр
Admin
и используйте свой метод для вывода списка привилегий.
Импортирование классов
187
9.9. Обновление аккумулятора:
используйте окончательную версию программы
electric_
car .py
из этого раздела. Добавьте в класс
Battery
метод с именем
upgrade_battery()
. Этот
метод должен проверять размер аккумулятора и устанавливать мощность равной 100, если
она имеет другое значение. Создайте экземпляр электромобиля с аккумулятором по умол-
чанию, вызовите
get_range()
, а затем вызовите
get_range()
во второй раз после вызова
upgrade_battery()
. Убедитесь в том, что запас хода увеличился.
Импортирование классов
С добавлением новой функциональности в классы файлы могут стать слишком
длинными, даже при правильном использовании наследования. В соответствии
с общей философией Python файлы не должны загромождаться лишними подроб-
ностями. Для этого Python позволяет хранить классы в модулях и импортировать
нужные классы в основную программу.
Импортирование одного класса
Начнем с создания модуля, содержащего только класс
Car
. При этом возникает
неочевидный конфликт имен: в этой главе уже был создан файл с именем
car .py
,
но этот модуль тоже должен называться
car .py
, потому что в нем содержится код
класса
Car
. Мы решим эту проблему, сохранив класс
Car
в модуле с именем
car .py
,
заменяя им файл
car .py
, который использовался ранее. В дальнейшем любой про-
грамме, использующей этот модуль, придется присвоить более конкретное имя
файла — например,
my_car .py
. Ниже приведен файл
car .py
с кодом класса
Car
:
car.py
❶
"""Класс для представления автомобиля."""
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):
"""Возвращает аккуратно отформатированное описание."""
long_name = f"{self.year} {self.manufacturer} {self.model}"
return long_name.title()
def read_odometer(self):
"""Выводит пробег машины в милях."""
print(f"This car has {self.odometer_reading} miles on it.")
def update_odometer(self, mileage):
188
Достарыңызбен бөлісу: |