![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
wind1 |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
Допустим, у нас есть модуль "abc", который находится в каталоге проекта. В нем есть класс "MyClass".
Чтобы создать экземпляр класса "MyClass", нужно написать:
Почему нельзя без импорта сразу написать так?
Ведь в java можно в аналогичной ситуации написать:
И все будет работать. С чем связана такая особенность? |
||||||
|
|||||||
4ell |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 17.9.2011 Репутация: 1 Всего: 1 |
Ну для начала стоит отметить что в стандартной библиотеке уже есть модуль с таким именем, поэтому загружается он.
http://docs.python.org/2/library/abc.html Такой пример работает
А вопрос стоит ли подгружать модули автоматом или не стоит больше философский, питон позволяет это реализовать, если это необходимо. Это сообщение отредактировал(а) 4ell - 11.1.2013, 17:55 |
|||
|
||||
wind1 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
Ну, имя модуля "abc" я привел как первое попавшееся в голову =) Пусть тогда будет не "abc", а "xyz" =)
Получается, в яве модули (вернее, не модули, а имена пакетов верхнего уровня) грузятся автоматом чтоли, без указания "import"? Это сообщение отредактировал(а) wind1 - 11.1.2013, 20:42 |
||||
|
|||||
4ell |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 17.9.2011 Репутация: 1 Всего: 1 |
Я не сильно знаком с явой, но насколько помню, из каждого файла с исходником получается .class файл с байткодом и потом это все упаковывается в единый jar файл. И только после того как мы получили целостную программу виртуальная машина будет ее исполнять. Поправьте если где ошибся.
Питон же просто исполняет файл сходу. Тут нет понятия проекта, каждый файл сам по себе. Поэтому нужно явно указать какой модуль нужно импортировать. Это сообщение отредактировал(а) 4ell - 13.1.2013, 11:44 |
|||
|
||||
SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: нет Всего: 74 |
Нет, поправлю про Java.
Там тоже нужно явно прописывать импорт:
И тут мы тоже видим и звездочки, и конкретные классы. Только структура проекта другая - каждый файл - класс. Классы объединены в пакеты. * импортирует все классы из этого пакета. В питоне from xyz import * импортирует все классы из модуля xyz. И это вполне закономерный импорт для всех языков. Иначе как компилятору/интерпретатору узнать, какой ресурс линковать/подгружать на исполнение? Поэтому всегда нужно явно указать, что мы хотим подключить. Плюс не забываем полиморфизм и пространства имен - без явного импорта может возникнуть путаница (хотя это абстрактный пример, для которого сложно представить задачу). -------------------- Всем добра ![]() |
|||
|
||||
wind1 |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 29.6.2007 Репутация: нет Всего: нет |
В яве импорт делается не для того, чтобы компилятор узнал, какой ресурс линковать/подгружать на исполнение, а для того, чтобы не писать каждый раз длинные пути. То есть, я могу писать просто:
Без предварительного импорта. А если я в питоне попытаюсь такое сделать, то такой трюк не пройдет. Даже если я согласен буду в .py скрипте прописывать полные пути к классам, мне придется их сначала импортировать. Это сообщение отредактировал(а) wind1 - 14.1.2013, 09:13 |
||||||
|
|||||||
SoWa |
|
|||
![]() Харекришна ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2422 Регистрация: 18.10.2004 Репутация: нет Всего: 74 |
Это так, но есть же негласные соглашения писать импорты, чтобы не плодить длинные портянки
![]() -------------------- Всем добра ![]() |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Python: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |