Импортирование одного класса

We use cookies. Read the Privacy and Cookie Policy

Начнем с создания модуля, содержащего только класс Car. При этом возникает неочевидный конфликт имен: в этой главе уже был создан файл с именем car.py, но этот модуль тоже должен называться car.py, потому что в нем содержится код класса Car. Мы решим эту проблему, сохранив класс Car в модуле с именем car.py, заменив им файл car.py, который использовался ранее. В дальнейшем любой программе, использующей этот модуль, придется присвоить более конкретное имя файла — например, my_car.py. Ниже приведен файл car.py с кодом класса Car:

car.py

(1) """Класс для представления автомобиля."""

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 = str(self.year) + ' ' + self.make + ' ' + self.model

. . . .return long_name.title()

. .

. .def read_odometer(self):

. . . ."""Выводит пробег машины в милях."""

. . . .print("This car has " + str(self.odometer_reading) + " miles on it.")

def update_odometer(self, mileage):

. . . ."""

. . . .Устанавливает на одометре заданное значение.

. . . .При попытке обратной подкрутки изменение отклоняется.

. . . ."""

. . . .if mileage >= self.odometer_reading:

. . . . . .self.odometer_reading = mileage

. . . .else:

. . . . . .print("You can't roll back an odometer!")

. .

. .def increment_odometer(self, miles):

. . . ."""Увеличивает показания одометра с заданным приращением."""

. . . .self.odometer_reading += miles

В точке (1) включается строка документации уровня модуля с кратким описанием содержимого модуля. Пишите строки документации для каждого созданного вами модуля.

Теперь мы создадим отдельный файл с именем my_car.py. Этот файл импортирует класс Car и создает экземпляр этого класса:

my_car.py

(1) from car import 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()

Команда import в точке (1) приказывает Python открыть модуль car и импортировать класс Car. Теперь мы можем использовать класс Car так, как если бы он был определен в этом файле. Результат остается тем же, что и в предыдущей версии:

2016 Audi A4

This car has 23 miles on it.

Импортирование классов повышает эффективность программирования. Представьте, каким длинным получился бы файл этой программы, если бы в него был включен весь класс Car. Перемещая класс в модуль и импортируя этот модуль, вы получаете ту же функциональность, но основной файл программы при этом остается чистым и удобочитаемым. Бульшая часть логики также может храниться в отдельных файлах; когда ваши классы работают так, как положено, вы можете забыть об этих файлах и сосредоточиться на высокоуровневой логике основной программы.