相关疑难解决方法(0)

为什么在赋值给sys.modules [__ name__]后__name__的值会发生变化?

在尝试做类似于Alex Martelli 的ActiveState配方标题为Python中Constants时,我遇到了意外的副作用(在Python 2.7中),它将类实例分配给sys.moduleshas中的一个条目- 即显然这样做更改__name__to 的值,None如下面的代码片段所示(它会破坏配方中的部分代码):

class _test(object): pass

import sys
print '# __name__: %r' % __name__
# __name__: '__main__'
sys.modules[__name__] = _test()
print '# __name__: %r' % __name__
# __name__: None

if __name__ == '__main__': # never executes...
    import test
    print "done"
Run Code Online (Sandbox Code Playgroud)

我想知道为什么会这样.我不相信它在Python 2.6和早期版本中是这样的,因为我有一些较旧的代码,显然if __name__ == '__main__':条件在赋值后按预期工作(但不再有).

FWIW,我也注意到这个名字在分配后也会_test从一个类对象反弹None回来.我觉得很奇怪他们正在反弹None而不是完全消失......

更新:

我想补充一点,任何实现效果的变通办法if __name__ == '__main__':都会受到高度赞赏.TIA!

python module

18
推荐指数
1
解决办法
6523
查看次数

标签 统计

module ×1

python ×1