создать столько экземпляров каждого класса, сколько потребуется.
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 Глава 9 • Классы
Выработка рабочего процесса
Как видите, Python предоставляет много возможностей структурирования кода
в крупных проектах. Вы должны знать все эти возможности, чтобы найти лучшие
способы организации своих проектов, а также лучше понимать код других раз-
работчиков.
На первых порах постарайтесь поддерживать простую структуру своего кода. По-
пробуйте разместить весь код в одном файле и, только когда все заработает, переме-
стите классы в отдельные модули. Если вам нравится схема взаимодействия между
модулями и файлами, попробуйте сохранить классы в модулях в начале работы над
проектом. Найдите подход, при котором у вас получается работоспособный код,
и двигайтесь дальше.
Достарыңызбен бөлісу: