2017-08-14 100 views
-2

我试图通过导入直接简化我的包(如requests模块)。从__init__.py定义跨模块/全局变量

为此,我认为使用__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都将是类对象的实例而不是模块。

谢谢!

+0

'myclass = myclass' - 你期望做什么? – user2357112

+0

@ user2357112我对它没有任何期望,只是在我的例子中加入了不恰当的(在这种情况下是微不足道的)变量的定义。我希望从'__init __。py'导入来工作,虽然... – ShellRox

+1

真的不清楚你想在这里做什么。将'myclass'导入'__init __。py'可以让你从''''package'import myclass'而不是'从package.index import myclass'中执行''。你还希望做什么? –

回答

0

找到了。

requests包使用像我一样,其功能是从__init__.py进口马上相同的技术,简单的例子:

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

然而,这个功能是从包仅进口内,因此还是应该

在我的情况,包和类对象requests.post

因此具有相同的N:从呼包但不幸的是,我不认为他们能够以一种整洁的方式取代对方。

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

如果我已经导入苹果类对象从__init__.py,我将称之为这样的:

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