Хитрый импорт модуля с поздним инициализацией - PullRequest
0 голосов
/ 28 февраля 2011

У меня такая простая структура модуля:

mod1/
    __init__.py
    clsOne.py
    clsN.py

Где код выглядит так:

__init__.py:
     # module init
     from clsOne import MyFirstCLass
     from clsN import NThCLass

     clshnd = MyFirstClass()
     ...
     nhnd = NThClass()

clsOne.py:
     class MyFirstClass( object ):
         pass
clsN.py:
     classNThClass( object ):
         pass

Теперь я использую их следующим образом:

Way #1) 
    from mod1.clsOne import MyFirstClass

или:

Way #2) 
    from mod1 import clshnd 

Можно ли импортировать имя clshnd, но таким образом, чтобы другие обработчики (т.е. nhnd) инициализировались только по требованию (при явном импорте)?
На данный момент оба пути: путь № 1 и путь № 2 вызывают вызов инициализации модуля, а значит: также создается объект NThClass. Я хотел бы избежать этого, потому что у меня много таких классов и я хотел бы избежать долгой инициализации, однако я также хотел бы иметь простой доступ (путь № 2).
Возможно ли это вообще или мне нужно перепроектировать модули и файлы (удалить из init )?

Збигнев

1 Ответ

0 голосов
/ 28 февраля 2011

Вы просто помещаете соответствующий код в отдельный модуль.

mod1/
    __init__.py
    clsOne.py
    clsN.py
    foo.py

А затем в foo.py:

from clsOne import MyFirstCLass
from clsN import NThCLass

clshnd = MyFirstClass()
...
nhnd = NThClass()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...