首页 > 为什么__name__的输出结果不一样?

为什么__name__的输出结果不一样?

文件名为const.py
在另一个文件引入const模块时会发现第一个print输出const,而第二个print输出None.为什么?

#!/usr/bin/python2.7
#coding:utf-8
import sys

class _const:
    class ConstError(TypeError): pass
    def __setattr__(self, key, val):
        if self.__dict__.has_key(key):
            raise self.ConstError, "can't rebind const(%s)" % key
        else:
            self.__dict__[key] = val


print __name__
sys.modules[__name__] = _const()
print __name__

  1. 本来sys.modules[__name__]<module 'const' from 'const.py'>

  2. 你执行sys.modules[__name__] = _const()等于将constmodule卸载再导入_const()这个东东

  3. 但实际这样导入是不对的,_const()只是个对象而已,跟module根本不搭噶

  4. 所以constmodule实际上被卸载了,所以打印__name__是None,因为它根本没被导入

【热门文章】
【热门文章】