在__init__.py中访问时__name__的值是多少

时间:2014-08-14 18:34:15

标签: python python-2.7

我目前的理解是,当一个人写from foo import barfoo这是一个包并拥有__init__.py时,会自动处理其__init__.py,之后会显示其资源{ {1}}将被导入。如果在命令提示符下,我写bar,并在该模块中调用python manage.py,在属于foo包的from foo import bar中,变量__init__.py则等于包裹名字?在这种情况下foo?

2 个答案:

答案 0 :(得分:5)

在包的__init__模块中,__name__设置为包的名称;例如模块存储在sys.modules下的内容。

对于包foo__name__设置为'foo'

>>> import os
>>> os.mkdir('foo')
>>> open('foo/__init__.py', 'w').write('print "__name__:", __name__')
>>> open('foo/bar.py', 'w').write('# nothing done here')
>>> from foo import bar
__name__: foo
>>> import sys
>>> sys.modules['foo']
<module 'foo' from 'foo/__init__.py'>
>>> sys.modules['foo'].__name__
'foo'

请注意,每个Python模块都有一个__name__变量;甚至是最初的脚本。如果您运行python manage.py,则初始脚本将作为__main__模块加载,因此* manage.py中的名称将设置为'__main__';此名称不会随脚本导入的内容而改变。

答案 1 :(得分:-2)

__name__属于您使用python调用的模块的本地范围(属性),即:在本例中为manage.py