一般情况下,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