sys.modules [__ name__] = _classname()。它实际上是做什么的?

时间:2019-07-24 19:23:51

标签: python

我正在阅读this piece of code中提到的Alex Martelli的this question。我知道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

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

1 个答案:

答案 0 :(得分:2)

我认为它正在将实例绑定到模块。因此,当您执行import const时,实际上就得到了_const类的实例。

这允许您在其上调用方法。例如__setattr__,在这种情况下,它将检查您仅绑定一次变量。