sys.modules[__name__] = _classname()。它实际上有什么作用?

K.M*_*ole 5 python

我正在阅读这个问题中提到的 Alex Martelli 的这段代码。我知道这告诉你你当前所在的模块,但是他末尾的这行代码确实让我感到困惑。在文件末尾声明当前模块的语句的含义和意义是什么?sys.modules[__name__]constant.py

# Put in const.py...:
class _const:
    class ConstError(TypeError): pass
    def __setattr__(self,name,value):
        if self.__dict__.has_key(name):
            raise self.ConstError, "Can't rebind const(%s)"%name
        self.__dict__[name]=value
import sys
sys.modules[__name__]=_const() #this I don't understand
# that's all -- now any client-code can
import const
Run Code Online (Sandbox Code Playgroud)

基本上,我的问题是,在我看来,这行代码没有做任何事情;我理解错了吗?由于在 Python 中,您不必将类定义放在单独的文件中,因此我认为我并不真正需要两个模块,除非我想重用“const”类。那么在这种情况下sys.moldules[__name__]=_const()也没有必要......我理解正确吗?

小智 2

我相信它将一个实例绑定到模块。因此,当您这样做时import const,您实际上获得了该类的一个实例_const

这允许您调用它的方法。例如,__setattr__在本例中,它会检查您是否只绑定一个变量一次。