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



Pdf көрінісі
бет95/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   91   92   93   94   95   96   97   98   ...   238
Байланысты:
2 5343781172763690906

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    Глава 9  •  Классы

Выработка рабочего процесса

Как видите, Python предоставляет много возможностей структурирования кода 

в крупных проектах. Вы должны знать все эти возможности, чтобы найти лучшие 

способы организации своих проектов, а также лучше понимать код других раз-

работчиков.

На первых порах постарайтесь поддерживать простую структуру своего кода. По-

пробуйте разместить весь код в одном файле и, только когда все заработает, переме-

стите классы в отдельные модули. Если вам нравится схема взаимодействия между 

модулями и файлами, попробуйте сохранить классы в модулях в начале работы над 

проектом. Найдите подход, при котором у вас получается работоспособный код, 

и двигайтесь дальше.





Достарыңызбен бөлісу:
1   ...   91   92   93   94   95   96   97   98   ...   238




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

    Басты бет