2010-12-11 8 views
2

Утро,Python - система применения

Получил приложение python, над которым я работаю.

В настоящее время он consits из всего пары файлов, но, как он получает больше я создаю все больше и больше файлов и верхнюю часть моего основного файла питона я делаю

import url_thread 
import task_database 
import xxxx 
import yyyy 

и я буду добавлять другой класс сегодня, который является еще одним импортом!

Есть ли способ, чтобы вставить эти PY файлы в папку, и просто импорт классов/*

Есть ли лучший способ, которым я должен делать это?

Подробнее, pythonic?

+0

Вы знаете, что можете сделать несколько импортных операций на линии? то есть «import url_thread, task_database, xxxx, yyyy». В общем, посмотрите, что говорят ниже о создании пакетов и импорте аккуратно. Избегайте использования 'from ... import *', если это действительно необходимо. –

+0

Кроме того, вы можете иметь более одного класса для каждого модуля! На всякий случай ты не знаешь. – Thomas

ответ

0

Вы можете сделать пакет и импортировать из этого пакета: from mypackage import *.

+2

Примечание: Это будет загружать '__init__' и импортировать оттуда. Кроме того, имейте в виду, что 'import *' имеет [довольно много ловушек и, следовательно, «считается вредным» в большинстве случаев] (http://docs.python.org/howto/doanddont.html#from-module-import). – delnan

1

Да, вы можете делать то, что вы просите, но это не рекомендуется.

вы можете создать package, содержащий все модули, а затем загрязняют ваше пространство имен, просто импортировать все:

from foo import * 

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

0

Не слушайте все, что люди говорят о «загрязнении пространства имен». Идем дальше и делаем from classes import *, если вам это удобно (и я считаю, что это так), но подумайте об использовании __all__ в вашем пакете.

Чтобы быть точным, следующая структура папок будет сделать это:

classes/ 
|-- class1.py 
|-- class2.py 
`-- __init__.py 

Добавление файла classes/__init__.py создает пакет. Это выглядит следующим образом:

Пожалуйста, обратите внимание на кавычки имена классов в __all__.

Затем, вы можете использовать пакет в любой сценарии у вас есть:

>>> from classes import * 
>>> Class1 
<class classes.class1.Class1 at 0xb781c68c> 
>>> Class2 
<class classes.class2.Class2 at 0xb781c6ec> 
>>> dir() 
['Class1', 'Class2', '__builtins__', '__doc__', '__name__', '__package__'] 

легко и приятно.