将常量集中到一个文件中

按命名风格,常量名所有字母大写,用下划线连接各个单词,然而这种方式并没有实现真正的常量,其对应的值仍然可以改变。
最好的方法,是通过自定义类实现常量功能。
下面的例子,要求符合“命名全部为大写”和“值一旦绑定便不可再修改”两个条件。

const.py

class _const(object):
    class ConstError(TypeError):pass       # TypeError 指对类型无效的操作
    class ConstCaseError(ConstError):pass

    def __setattr__(self, key, value):      # 在对类的属性赋值时会自动调用
        if key in self.__dict__:            # object.__dict__以dict的形式保存了object内所有可写的属性,name为变量名,value为变量值。
            raise self.ConstError("Can't change const.%s" % key)
        if not key.isupper():
            raise self.ConstCaseError("const name '%s' is not all uppercase" % key)
        self.__dict__[key] = value

import sys
sys.modules[__name__] = _const()      

# sys.modules保存有当前Python环境中已经导入的模块记录,这是一个全局字典,当Python启动后就加载在内存中。
# dict的key为文件名,value为模块对象。
# __name__就是标识模块的名字的一个系统变量。

# sys.modules['const'] = _const()
# 即,让_const类作为模块的入口点,引入const.py等价于声明了一个_const类的实例。

声明常量,将存放常量的文件命名为constant.py:

import const
const.COMPANY = 'IBM'
const.MY_CONST = 'ABC'

当其他模块引用常量时,按照如下方式进行即可:

from constant import const
print(const.COMPANY)
print(const.MY_CONST+'d')
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 说是前言,其实也是本文诞生的目的。随着公司业务的不断增加,功能的快速迭代,app的业务线越来越多,代码体积变...
    Yealink阅读 5,675评论 0赞 13
  • 前言 说是前言,其实也是本文诞生的目的。随着公司业务的不断增加,功能的快速迭代,app的业务线越来越多,代码体积变...
    梦翔_d674阅读 1,585评论 0赞 2
  • 基本内置类型 算术类型字符整型布尔值浮点数 空类型(void) 算术类型 带符号类型和无符号类型int、short...
    2625K阅读 3,708评论 0赞 1
  • 约定 在我看来,开发规范像是一条可供参考的标准线。不同开发者可以根据这条标准线来规范自己的开发行为,尤其是在大的项...
    xxzsxxzs阅读 710评论 1赞 0
  • 有一次,朋友打电话问我有没有时间来县城,是因为发现了一个好东西。 本不想去,再者好项目多的是,你有多少精力?用什么...
    心念有约阅读 474评论 0赞 0

友情链接更多精彩内容