【发布时间】:2017-08-14 09:10:17
【问题描述】:
我试图通过简单的导入来简化我的包(就像requests 模块一样)。
为此,我认为使用__init__.py 将是最佳选择。因为,当用户导入我的包时,__init__.py 被调用。然后我在里面添加了一些代码,从特定模块导入对象。
请想象一下,我的包和类对象都具有相同的名称:
# __init__.py
from index import packagename # This is class object
myclass = myclass # This is just example to be substituted, I know it has no effect
print(myclass)
每当导入包时,Python 都会记录 myclass 的类型:
<class 'packagename.index.packagename'> # "packagename" in the beginning is my package, "packagename" in the end is class object
但是,没有设置类的新实例:
<module 'packagename' from 'packagename/__init__.pyc'>
根据我的研究,我还没有为我的问题找到任何可靠的答案(如果我遗漏了什么,请致歉),但是,简而言之,我如何从__init__.py 定义变量以便用户可以使用它?
因此,每当用户导入 packagename 时,变量 packagename 将是类对象的实例,而不是模块。
谢谢!
【问题讨论】:
-
myclass = myclass- 你希望它做什么? -
@user2357112 我对此没有任何期望,只是添加了我的变量定义不正确(在这种情况下无关紧要)的示例。我希望从
__init__.py导入可以工作... -
真的不清楚你想在这里做什么。将
myclass导入__init__.py允许您执行from package import myclass而不是from package.index import myclass。你还希望做什么? -
@DanielRoseman 抱歉,我错误地替换了示例值,我正在从索引模块
from index import myclass导入myclass。所以假设包名与类名相同,我要做的是在导入包时导入类,例如,当我导入MyPackageName模块MyPackageName类对象时将被导入并且替换。 -
用更合适的细节更新了答案。