Импортирование
классов
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):