一般情况下,python之中没有常量。
但是,利用python的特性,可以构建“伪常量”,即一旦赋值便不能修改的变量。
涉及到赋值,在python中一个对象的赋值是由__setattr__完成的。
要想构建“伪常量”,必须对__setattr__这一函数进行修改。
比如在contant_class.py中:
class _const(object):
"""docstring for _const"""
class ConstError(TypeError): # 构建常量异常
pass
class ConstCaseError(ConstError): # 构建常量的大小写异常
pass
def __setattr__(self, name, value):
if name in self.__dict__:
print("the value {name}can not be changed".format(name=name))
raise self.ConstError # 已有属性不能在改变
if not name.isupper():
print( "the {name} should be capitalized.".format(name=name))
raise self.ConstCaseError # 属性的名字必须全为大写字母
self.__dict__[name] = value
import sys
sys.modules[__name__] = _const() # 利用python模块机制,引入本文件后自动加载_const实例
这样写代码时可以把所有常量保存在constan.py文件中。比如:
import const
const.OI = 1
const.PP = 'ookk'
如果在其他文件中需要引入常量,可以进行如下引用:
import constant
print(constant.const.OI)
print(constant.const.PP)
constant.const.OI = 2
当然“constant.const.OI = 2”会抛出异常,我们的目的就达到了。
运行结果如下:
1
ookk
the value OIcan not be changed
Traceback (most recent call last):
File “run.py”, line 5, in < module>
constant.const.OI = 2
File “C:\pyPro\notebook\const.py”, line 16, in __setattr__
raise self.ConstError
const.ConstError