Книга «Изучаем Python»



Pdf көрінісі
бет110/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   106   107   108   109   110   111   112   113   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )


часть ее логики скрыта в модуле:
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

Достарыңызбен бөлісу:
1   ...   106   107   108   109   110   111   112   113   ...   266




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет