我试图通过使导入变得简单(就像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
将是类对象的实例而不是模块。
谢谢!
发现了。
requests
包使用与我相同的技术,它们的功能是立即导入的__init__.py
,单个示例:
from .api import request, get, head, post, patch, put, delete, options
但是,此函数仅从包中导入,因此仍应从包中调用它们:
requests.post
所以在我的例子中,Package 和 Class Object 具有相同的名称,但不幸的是,我认为它们不能以简洁的方式相互替换。
如果我的包被称为 Apple 并且index.py
模块内的类对象也被称为 Apple。
如果我从 导入了 Apple 类对象__init__.py
,我会这样称呼它:
Apple.Apple
(其中 Apple[0] 是包的名称,Apple[1] 是类对象的名称)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句