Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Python: Общие вопросы > Особенность импорта python |
Автор: wind1 11.1.2013, 10:48 | ||||||
Допустим, у нас есть модуль "abc", который находится в каталоге проекта. В нем есть класс "MyClass". Чтобы создать экземпляр класса "MyClass", нужно написать:
Почему нельзя без импорта сразу написать так?
Ведь в java можно в аналогичной ситуации написать:
И все будет работать. С чем связана такая особенность? |
Автор: 4ell 11.1.2013, 17:52 | ||
Ну для начала стоит отметить что в стандартной библиотеке уже есть модуль с таким именем, поэтому загружается он. http://docs.python.org/2/library/abc.html Такой пример работает
А вопрос стоит ли подгружать модули автоматом или не стоит больше философский, питон позволяет это реализовать, если это необходимо. |
Автор: 4ell 13.1.2013, 11:42 |
Я не сильно знаком с явой, но насколько помню, из каждого файла с исходником получается .class файл с байткодом и потом это все упаковывается в единый jar файл. И только после того как мы получили целостную программу виртуальная машина будет ее исполнять. Поправьте если где ошибся. Питон же просто исполняет файл сходу. Тут нет понятия проекта, каждый файл сам по себе. Поэтому нужно явно указать какой модуль нужно импортировать. |
Автор: SoWa 14.1.2013, 08:47 | ||
Нет, поправлю про Java. Там тоже нужно явно прописывать импорт:
И тут мы тоже видим и звездочки, и конкретные классы. Только структура проекта другая - каждый файл - класс. Классы объединены в пакеты. * импортирует все классы из этого пакета. В питоне from xyz import * импортирует все классы из модуля xyz. И это вполне закономерный импорт для всех языков. Иначе как компилятору/интерпретатору узнать, какой ресурс линковать/подгружать на исполнение? Поэтому всегда нужно явно указать, что мы хотим подключить. Плюс не забываем полиморфизм и пространства имен - без явного импорта может возникнуть путаница (хотя это абстрактный пример, для которого сложно представить задачу). |
Автор: wind1 14.1.2013, 09:08 | ||||||
В яве импорт делается не для того, чтобы компилятор узнал, какой ресурс линковать/подгружать на исполнение, а для того, чтобы не писать каждый раз длинные пути. То есть, я могу писать просто:
Без предварительного импорта. А если я в питоне попытаюсь такое сделать, то такой трюк не пройдет. Даже если я согласен буду в .py скрипте прописывать полные пути к классам, мне придется их сначала импортировать. |
Автор: SoWa 14.1.2013, 16:55 |
Это так, но есть же негласные соглашения писать импорты, чтобы не плодить длинные портянки ![]() |