часть ее логики скрыта в модуле:
2016 Tesla Model S
This car has a 70-kWh battery.
This car can go approximately 240 miles on a full charge.
Импортирование нескольких классов из модуля
В файл программы можно импортировать столько классов, сколько потребуется.
Если вы захотите создать обычный автомобиль и электромобиль в одном файле,
потребуется импортировать оба класса,
Car
и
ElectricCar
:
my_cars.py
from car import Car, ElectricCar
my_beetle = Car('volkswagen', 'beetle', 2016)
print(my_beetle.get_descriptive_name())
my_tesla = ElectricCar('tesla', 'roadster', 2016)
print(my_tesla.get_descriptive_name())
Чтобы импортировать несколько классов из модуля, разделите их имена запя-
тыми
. После того как необходимые классы будут импортированы, вы можете
создать столько экземпляров каждого класса, сколько потребуется.
180
Глава 9 • Классы
В этом примере создается обычный автомобиль Volkswagen Beetle
и электро-
мобиль Tesla Roadster
:
2016 Volkswagen Beetle
2016 Tesla Roadster
Импортирование всего модуля
Также возможно импортировать весь модуль, а потом обращаться к нужным клас-
сам с использованием точечной записи. Этот способ прост, а полученный код легко
читается. Так как каждый вызов, создающий экземпляр класса, включает имя моду-
ля, в программе не будет конфликтов с именами, используемыми в текущем файле.
my_cars.py
import car
my_beetle = car.Car('volkswagen', 'beetle', 2016)
print(my_beetle.get_descriptive_name())
my_tesla = car.ElectricCar('tesla', 'roadster', 2016)
print(my_tesla.get_descriptive_name())
В точке
импортируется весь модуль
car
, после чего программа обращает-
ся к нужным классам с использованием синтаксиса
имя_модуля
.
имя_класса
.
В точке
снова создается экземпляр Volkswagen Beetle, а в точке
— экземпляр
Tesla Roadster.
Импортирование всех классов из модуля
Для импортирования всех классов из модуля используется следующий синтаксис:
from
имя_модуля
import *
Использовать этот способ не рекомендуется по двум причинам. Прежде всего,
бывает полезно прочитать команды
import
в начале файла и получить четкое пред-
ставление о том, какие классы используются в программе, а при таком подходе
неясно, какие классы из модуля нужны программе. Также возможны конфликты
с именами в файле. Если вы случайно импортируете класс с именем, уже при-
сутствующим в файле, в программе могут возникнуть коварные ошибки. Почему
я привожу описание этого способа? Хотя использовать его не рекомендуется, ско-
рее всего, вы встретите его в коде других разработчиков.
Итак, если вам нужно импортировать большое количество классов из модуля,
лучше импортировать весь модуль и воспользоваться синтаксисом
имя_модуля
.
имя_класса
. Хотя вы не видите перечень всех используемых классов в начале
файла, по крайней мере ясно видно, где модуль используется в программе. Также
предотвращаются потенциальные конфликты имен, которые могут возникнуть при
импортировании каждого класса в модуле.
Импортирование нескольких классов из модуля
181
Импортирование модуля в модуль
Иногда классы приходится распределять по нескольким модулям, чтобы избежать
чрезмерного разрастания одного файла и хранения несвязанных классов в одном
модуле. При хранении классов в нескольких модулях может оказаться, что один
класс из одного модуля зависит от класса из другого модуля. В таких случаях не-
обходимый класс можно импортировать в первый модуль.
Допустим, класс
Car
хранится в одном модуле, а классы
ElectricCar
и
Battery
—
в другом. Мы создадим новый модуль с именем
electric_car .py
(он заменит файл
electric_car .py
, созданный ранее) и скопируем в него только классы
Battery
и
ElectricCar
:
electric_car.py
"""Набор классов для представления электромобилей."""
from car import Car
class Battery():
...
class ElectricCar(Car):
...
Классу
ElectricCar
необходим доступ к классу-родителю
Car
, поэтому класс
Car
импортируется прямо в модуль в точке
. Если вы забудете вставить эту команду,
при попытке создания экземпляра
ElectricCar
произойдет ошибка. Также необ-
ходимо обновить модуль
Car
, чтобы он содержал только класс
Car
:
car.py
"""Простая модель автомобиля."""
class Car():
...
Теперь вы можете импортировать классы из каждого модуля по отдельности
и создать ту разновидность машины, которая вам нужна:
my_cars.py
from car import Car
from electric_car import ElectricCar
my_beetle = Car('volkswagen', 'beetle', 2016)
print(my_beetle.get_descriptive_name())
my_tesla = ElectricCar('tesla', 'roadster', 2016)
print(my_tesla.get_descriptive_name())
В точке
класс
Car
импортируется из своего модуля, а класс
ElectricCar
— из сво-
его. После этого создаются экземпляры обоих разновидностей. Вывод показывает,
что экземпляры были созданы правильно:
2016 Volkswagen Beetle
2016 Tesla Roadster
182
Достарыңызбен бөлісу: |