問題描述
我正在嘗試組織一些模塊供我自己使用.我有這樣的事情:
lib/__init__.py設置.py富/__init__.py一些對象.py酒吧/__init__.py別的東西.py
在 lib/__init__.py
中,我想定義一些在導入 lib 時要使用的類.但是,如果不將類分成文件并將它們導入__init__.py
,我似乎無法弄清楚.
而不是說:
庫/__init__.py設置.py助手類.py富/__init__.py一些對象.py酒吧/__init__.py別的東西.py從 lib.settings 導入值從 lib.helperclass 導入助手
我想要這樣的東西:
庫/__init__.py #Helper 在這個文件中定義設置.py富/__init__.py一些對象.py酒吧/__init__.py別的東西.py從 lib.settings 導入值從庫導入助手
有可能嗎,還是我必須將類分離到另一個文件中?
編輯
好的,如果我從另一個腳本導入 lib,我可以訪問 Helper 類.如何從 settings.py 訪問 Helper 類?
此處示例描述了包內引用.我引用子模塊經常需要相互引用".就我而言,lib.settings.py 需要 Helper,而 lib.foo.someobject 需要訪問 Helper,那么我應該在哪里定義 Helper 類?
'
lib/
的父目錄必須在sys.path
中.您的
lib/__init__.py
"可能如下所示:來自 .導入設置 # 或者只是在舊 Python 版本上導入設置"類助手(對象):經過
那么下面的例子應該可以工作:
從 lib.settings 導入值從庫導入助手
對問題的編輯版本的回答:
__init__.py
定義了你的包從外部看起來如何.如果您需要在 settings.py
中使用 Helper
,則在不同的文件中定義 Helper
,例如 'lib/helper.py
'.
命令:
$ python import_submodule.py
輸出:
設置幫手lib.settings 中的助手某物lib.foo.someobject 中的助手# ./import_submodule.py導入 fnmatch,操作系統從 lib.settings 導入值從庫導入助手打印對于 os.walk('.') 中的根目錄、目錄和文件:對于 fnmatch.filter(files, '*.py') 中的 f:print "# %s/%s" % (os.path.basename(root), f)打印打開(os.path.join(root, f)).read()打印# lib/helper.py打印幫手"類助手(對象):def __init__(self, module_name):print "Helper in", module_name# lib/settings.py打印設置"導入助手類值(對象):經過helper.Helper(__name__)# lib/__init__.py#from __future__ 導入 absolute_import導入設置、foo.someobject、助手助手 = helper.Helper# foo/someobject.py打印某物"從 .. 導入助手helper.Helper(__name__)# foo/__init__.py導入某個對象
I am trying to organize some modules for my own use. I have something like this:
lib/
__init__.py
settings.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
In lib/__init__.py
, I want to define some classes to be used if I import lib. However, I can't seem to figure it out without separating the classes into files, and import them in__init__.py
.
Rather than say:
lib/
__init__.py
settings.py
helperclass.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
from lib.settings import Values
from lib.helperclass import Helper
I want something like this:
lib/
__init__.py #Helper defined in this file
settings.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
from lib.settings import Values
from lib import Helper
Is it possible, or do I have to separate the class into another file?
EDIT
OK, if I import lib from another script, I can access the Helper class. How can I access the Helper class from settings.py?
The example here describes Intra-Package References. I quote "submodules often need to refer to each other". In my case, the lib.settings.py needs the Helper and lib.foo.someobject need access to Helper, so where should I define the Helper class?
'
lib/
's parent directory must be insys.path
.Your '
lib/__init__.py
' might look like this:from . import settings # or just 'import settings' on old Python versions class Helper(object): pass
Then the following example should work:
from lib.settings import Values
from lib import Helper
Answer to the edited version of the question:
__init__.py
defines how your package looks from outside. If you need to use Helper
in settings.py
then define Helper
in a different file e.g., 'lib/helper.py
'.
. | `-- import_submodule.py `-- lib |-- __init__.py |-- foo | |-- __init__.py | `-- someobject.py |-- helper.py `-- settings.py 2 directories, 6 files
The command:
$ python import_submodule.py
Output:
settings
helper
Helper in lib.settings
someobject
Helper in lib.foo.someobject
# ./import_submodule.py
import fnmatch, os
from lib.settings import Values
from lib import Helper
print
for root, dirs, files in os.walk('.'):
for f in fnmatch.filter(files, '*.py'):
print "# %s/%s" % (os.path.basename(root), f)
print open(os.path.join(root, f)).read()
print
# lib/helper.py
print 'helper'
class Helper(object):
def __init__(self, module_name):
print "Helper in", module_name
# lib/settings.py
print "settings"
import helper
class Values(object):
pass
helper.Helper(__name__)
# lib/__init__.py
#from __future__ import absolute_import
import settings, foo.someobject, helper
Helper = helper.Helper
# foo/someobject.py
print "someobject"
from .. import helper
helper.Helper(__name__)
# foo/__init__.py
import someobject
這篇關于如何導入在 __init__.py 中定義的類的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!