我正在阅读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()
也不是必需的……我理解正确吗?
答案 0 :(得分:2)
我认为它正在将实例绑定到模块。因此,当您执行import const
时,实际上就得到了_const
类的实例。
这允许您在其上调用方法。例如__setattr__
,在这种情况下,它将检查您仅绑定一次变量。