![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Litkevich Yuriy |
![]()
Сообщение
#1
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Подозреваю, что должна существовать возможность раскладывать модули по разным каталогам. Так сказать для удобства.
Но как интерпретатору сказать какие где искать? пример (есть и файлы с одинаковыми именами но из разных каталогов)
Теперь задачки: 1) положим, что в main.py нужно импортировать group1\foo.py и group1\bar.py 2) положим, что в main.py нужно импортировать group1\foo.py и group2\foo.py 3) положим, что в main.py нужно импортировать group1\foo.py, а в group1\foo.py импортировать group2\foo.py и group1\bar.py решаемая ли это задача для Питона? Например, для многих оберонов - нет, за исключением Оберон-2 |
|
|
Novak |
![]()
Сообщение
#2
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 319 Регистрация: 15.3.2008 Из: Замкадыш Пользователь №: 121 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
Вполне решаемая.
Для того, чтобы папка считалась модулем, необходимо, чтобы в ней был файл __init__.py Т.е. тогда твоя структура будет вот такой
Тогда из файла main.py или из любого другого, если папка src находится в pythnopath, можно сделать импорт
Если при этом встречаются одинаковые имена, то, вроде, они перекрываются, т.е. используется последнее, которое было объявлено. Чтобы использовать разные модули или классы с одинаковыми именами из разных модулей, можно использовать as при импорте
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#3
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Novak |
![]()
Сообщение
#4
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 319 Регистрация: 15.3.2008 Из: Замкадыш Пользователь №: 121 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
А что в нём? Если добавить src в pythonpath, то при импорте будет происходить поиск указанных модулей и в этой папке.
Потому конструкция
Будет работать и в group1\foo.py Вот пример main.py
Всё импортируется, остальные файлы прикрепил. Результат такой: /System/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6 /Users/novak/prog/src/main.py __init__ in group1 __init__ in group2 Cat in group1.foo Murka Dog in group2.foo Barbos Dog in group1.bar Sharik
Прикрепленные файлы
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#5
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
я вчера ночью до такого извращения додумался:
|
|
|
Novak |
![]()
Сообщение
#6
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 319 Регистрация: 15.3.2008 Из: Замкадыш Пользователь №: 121 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
Кстати, использование звёздочки при импорте - это очень-очень не очень хорошо
Лучше или просто модуль подключить или уж конкртные вещи из модуля дёргать |
|
|
Litkevich Yuriy |
![]()
Сообщение
#7
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Лучше или просто модуль подключить или уж конкртные вещи из модуля дёргать в случае с QtGui/QtCore это совершенно не прикольно - руки отваливаютсяП.С. В оберонах вообще нельзя такой трюк провернуть как в питоне со звёздочкой, мне звёздочка очень понравилась ![]() П.П.С. правда в __init__.py если нету определения что такое "все модули", то интерпретатор ничего не видит, блин |
|
|
Novak |
![]()
Сообщение
#8
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 319 Регистрация: 15.3.2008 Из: Замкадыш Пользователь №: 121 Спасибо сказали: 28 раз(а) Репутация: ![]() ![]() ![]() |
в случае с QtGui/QtCore это совершенно не прикольно - руки отваливаются Ну так работать стоит в IDE - там машина может всё сделать. Или же импортировать только модуль и перед именами ставить имя модуля. Зато потом не будет вопросов "так, а эта хрень тут откуда появилась" ППС не понял - что за определения нету в __init__.py? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#9
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 16.2.2025, 19:03 |