任务:
需要定义一些模块级别的变量(比如命名的常量),而且客户代码无法将其重新绑定;
解决方案:
#coding = utf-8 class _const(object): class ConstError(TypeError): pass def __setattr__(self,name,value): if name in self.__dict__: raise self.ConstError,"Can‘t rebind const(%s)" % name self.__dict__[name] = value def __delattr__(self,name): if name in self.__dict__: raise self.ConstError,"Can‘t unbind const(%s)" % name raise NameError,name import sys sys.modules[__name__] = _const()
使用方法:
1、将以上代码保存为const.py,然后将该文件的目录添加到sys.path目录下;
2、然后运行const.py
3、在python shell中输入:
import const
#测试代码
const.magic = 23
备注:现在任何客户代码都可以导入const,并将const模块的一个属性绑定一次,但仅能绑定一次;
一旦某属性已经被绑定,程序无法将其重新绑定或者解除绑定
const.magic = 99 #抛出const.ConstError
del const.magic #抛出const.ConstError
时间: 2024-10-05 04:04:14