从__init __。py

时间:2017-08-14 09:10:17

标签: python import

我试图通过简单导入(例如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将是类对象的实例,而不是模块。

谢谢!

1 个答案:

答案 0 :(得分:0)

找到它。

requests包使用与我相同的技术,它们的功能立即从__init__.py导入,单个示例:

from .api import request, get, head, post, patch, put, delete, options

但是,此函数仅从包中导入,因此仍应从包中调用它们:

requests.post

所以在我的例子中,Package和Class Object具有相同的名称,但不幸的是,我认为它们不能以一种巧妙的方式相互替换。

如果我的软件包被称为Apple,而index.py模块中的类对象也称为Apple。

如果我从__init__.py导入了Apple Class Object,我会这样称呼它:

Apple.Apple(其中Apple [0]是包的名称,Apple [1]是类对象的名称)