crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Python, раскладывание модулей по разным папочкам
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 15.11.2010, 0:46
 
Цитата(Novak @ 15.11.2010, 4:05) *
ППС не понял - что за определения нету в __init__.py?
например такого:
__all__ = ['QtCore', 'QtGui', 'QtNetwork', 'QtOpenGL', 'QtSql', 'QtSvg', 'QtTest', 'QtWebKit', 'QtScript']
Novak Дата 15.11.2010, 0:05
 
Цитата(Litkevich Yuriy @ 14.11.2010, 18:28) *
в случае с QtGui/QtCore это совершенно не прикольно - руки отваливаются

Ну так работать стоит в IDE - там машина может всё сделать.
Или же импортировать только модуль и перед именами ставить имя модуля.
Зато потом не будет вопросов "так, а эта хрень тут откуда появилась"

ППС не понял - что за определения нету в __init__.py?
Litkevich Yuriy Дата 14.11.2010, 18:28
 
Цитата(Novak @ 14.11.2010, 22:08) *
Лучше или просто модуль подключить или уж конкртные вещи из модуля дёргать
в случае с QtGui/QtCore это совершенно не прикольно - руки отваливаются

П.С.
В оберонах вообще нельзя такой трюк провернуть как в питоне со звёздочкой, мне звёздочка очень понравилась :).

П.П.С.
правда в __init__.py если нету определения что такое "все модули", то интерпретатор ничего не видит, блин
Novak Дата 14.11.2010, 18:08
  Кстати, использование звёздочки при импорте - это очень-очень не очень хорошо
Лучше или просто модуль подключить или уж конкртные вещи из модуля дёргать
Litkevich Yuriy Дата 14.11.2010, 16:22
  я вчера ночью до такого извращения додумался:
sys.path.append('../common')
from qtsvgpixmapcache import *
Novak Дата 14.11.2010, 14:45
  А что в нём? Если добавить src в pythonpath, то при импорте будет происходить поиск указанных модулей и в этой папке.
Потому конструкция
import group2.foo

Будет работать и в group1\foo.py
Вот пример main.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from group1.foo import Cat
from group1.foo import Dog
from group1.foo import AnotherDog


cat = Cat("Murka")
cat.get_name()
dog = Dog("Barbos")
dog.get_name()
puppy = AnotherDog("Sharik")
puppy.get_name()

Всё импортируется, остальные файлы прикрепил.
Результат такой:

/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 Дата 14.11.2010, 13:12
  а вот этот авриант:
Цитата(Litkevich Yuriy @ 14.11.2010, 5:28) *
3) положим, что в main.py нужно импортировать group1\foo.py, а в group1\foo.py импортировать group2\foo.py и group1\bar.py
Novak Дата 14.11.2010, 12:26
  Вполне решаемая.
Для того, чтобы папка считалась модулем, необходимо, чтобы в ней был файл __init__.py
Т.е. тогда твоя структура будет вот такой
src\
|-- group1\
|      |-- __init__.py
|      |-- foo.py
|      |-- bar.py
|-- group2\
|      |-- __init__.py
|      |-- foo.py
|      |-- bar.py
|-- main.py

Тогда из файла main.py или из любого другого, если папка src находится в pythnopath, можно сделать импорт
import group1.foo
import group2.bar

Если при этом встречаются одинаковые имена, то, вроде, они перекрываются, т.е. используется последнее, которое было объявлено.
Чтобы использовать разные модули или классы с одинаковыми именами из разных модулей, можно использовать as при импорте
from blabla import foo
from nana import foo as bar

Litkevich Yuriy Дата 14.11.2010, 1:28
  Подозреваю, что должна существовать возможность раскладывать модули по разным каталогам. Так сказать для удобства.
Но как интерпретатору сказать какие где искать?

пример (есть и файлы с одинаковыми именами но из разных каталогов)

src\
|-- group1\
|      |-- foo.py
|      |-- bar.py
|-- group2\
|      |-- foo.py
|      |-- bar.py
|-- main.py


Теперь задачки:
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
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.4.2024, 17:19