【发布时间】:2011-07-18 22:39:34
【问题描述】:
在尝试执行类似于 Alex Martelli 的名为 Constants in Python 的 ActiveState 配方中的内容时,我遇到了意外的副作用(在 Python 2.7 中),将类实例分配给 sys.modules 中的条目具有 - - 也就是说,这样做显然会将__name__ 的值更改为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"
我想了解为什么会这样。我不相信在 Python 2.6 和更早版本中是这样的,因为我有一些旧代码,显然 if __name__ == '__main__': 条件在分配后按预期工作(但不再如此)。
FWIW,我还注意到名称 _test 在分配后也从类对象反弹到 None。我觉得奇怪的是他们正在反弹到None,而不是完全消失......
更新:
我想补充一点,鉴于所发生的情况,任何实现if __name__ == '__main__': 效果的变通方法将不胜感激。蒂亚!
【问题讨论】: