因为种种原因,Python并未提供如C/C++/Java一样的const修饰符,换言之,python中没有常量。
Python程序一般通过约定俗成的变量名全大写的形式来表示这是一个常量,但是这终究不是长久之计。
目前python3依然没有真正意义的常量
在python项目开发中我们有时候会需要自定义常量,在python中自定义常量的方法有两种:
1. 通过命名风格来提示该变量为常量,如变量名所有字母大写,单词之间用下划线连接等,但这种方法只是一种约定俗成的规则,其对应的值仍然可以改变.
2. 通过自定义的类来实现常量功能
废话不多说直接上代码
代码已经逐行注解,如仍有疑问,欢迎与我交流
# -*- coding: utf-8 -*-
"""
本模块基于python 3.6.2 环境
csdn id : pengtaochang
email: pengtaochang@163.com
欢迎跟我交流
"""
class _const(object): # 自定义一个常量类
"""自定义常量类"""
class ConstError(BaseException) : pass # 内部自定义修改常量值异常
class ConstCaseError(ConstError): pass # 内部自定义常量非大写异常
def __setattr__(self, name, value): # setattr 魔法方法在类属性赋值时 自动调用 可实现我们抛出异常的操作
"""
name和value 在进行赋值操作,会自动传入
name: 常量名
value: 常量值
"""
if name in self.__dict__.keys(): # 判断 常量名是否存在 存在抛出异常
raise self.ConstError("constant reassignment error!")
if not name.isupper(): # 判断 常量名是否全为大写 非全部大写抛出异常
raise self.ConstCaseError("const name '%s' is not all uppercase "% name)
self.__dict__[name] = value # 满足上述条件 进行赋值操作
import sys
sys.modules[__name__] = _const() # 为方便模块导入 将类名绑定到本模块名上 ,导入后可直接使用 模块名 const.PI 来操作常量
代码测试
1 常量再次赋值
import const
const.PIa = 3.1415926
const.PI = 3.6 # 控制台打印:const.ConstCaseError: const name 'PIa' is not all uppercase
2 常量名非全部大写
import const
const.hhh=334 # 控制台打印:const.ConstCaseError: const name 'PIa' is not all uppercase
到此基本实现了自定义常量的使用
END