Python中实现常量(Const)功能

 更新时间:2015年01月28日 16:40:44   投稿:junjie  
这篇文章主要介绍了Python中实现常量(Const)功能,python语言本身没有提供const,本文使用一个类来实现常量定义功能,并介绍了使用方法,需要的朋友可以参考下

python语言本身没有提供const,但实际开发中经常会遇到需要使用const的情形,由于语言本身没有这种支出,因此需要使用一些技巧来实现这一功能

定义const类如下

复制代码 代码如下:

import sys

class Const(object):
    class ConstError(TypeException): pass
    def __setattr__(self, key, value):
        if self.__dict__.has_key(key):
            raise self.ConstError, "Changing const.%s" % key
        else:
            self.__dict__[key] = value

    def __getattr__(self, key):
        if self.__dict__.has_key(key):
            return self.key
        else:
            return None

sys.modules[__name__] = Const()


使用sys.modules[name]可以获取一个模块对象,并可以通过该对象获取模块的属性,这儿使用了sys.modules向系统字典中注入了一个Const对象从而实现了在执行import const时实际获取了一个Const实例的功能,sys.module在文档中的描述如下
复制代码 代码如下:

sys.modules
This is a dictionary that maps module names to modules which have already been loaded. This can be manipulated to force reloading of modules and other tricks. Note that removing a module from this dictionary is not the same as calling reload() on the corresponding module object.

sys.modules[name] = Const()这条语句将系统已加载的模块列表中的const替换为了Const(),即一个Const实例

这样,整个工程需要使用的常量都应该定义在一个文件中,如下

复制代码 代码如下:

from project.utils import const

const.MAIL_PROTO_IMAP = 'imap'
const.MAIL_PROTO_GMAIL = 'gmail'
const.MAIL_PROTO_HOTMAIL = 'hotmail'
const.MAIL_PROTO_EAS = 'eas'
const.MAIL_PROTO_EWS = 'ews'


这儿首先需要说明python中import module和from module import的区别

1.import module只是将module的name加入到目标文件的局部字典中,不需要对module进行解释
2.from module import xxx需要将module解释后加载至内存中,再将相应部分加入目标文件的局部字典中
3.python模块中的代码仅在首次被import时被执行一次

from project.utils import const时,发生了sys.modules[name] = Const(),此时const模块已经加载进入内存,系统字典中也已经有了Const对象,随后既可以使用Const实例了

在其他文件中需要使用常量值时,以如下方式调用

复制代码 代码如下:

from project.apps.project_consts import const

print const.MAIL_PROTO_IMAP

相关文章

  • VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)

    VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)

    这篇文章主要介绍了VSCode中autopep8无法运行问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python利用os模块实现自动删除磁盘文件

    Python利用os模块实现自动删除磁盘文件

    你们一定想不到os模块还可以这样玩,本文就将利用Python中的os模块实现自动删除磁盘文件功能,文中的示例代码讲解详细,感兴趣的可以尝试一下
    2022-11-11
  • 用Python进行行为驱动开发的入门教程

    用Python进行行为驱动开发的入门教程

    这篇文章主要介绍了用Python进行行为驱动开发的入门教程,本文也对BDD的概念做了详细的解释,需要的朋友可以参考下
    2015-04-04
  • python中导入 train_test_split提示错误的解决

    python中导入 train_test_split提示错误的解决

    这篇文章主要介绍了python中导入 train_test_split提示错误的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • VsCode中超好用的8个python插件推荐

    VsCode中超好用的8个python插件推荐

    本人日常使用vscode进行开发,并且比较喜欢折腾vscode,会到处找这一些好玩的插件,于是越攒越多,下面这篇文章主要给大家介绍了关于VsCode中超好用的8个python扩展插件的相关资料,需要的朋友可以参考下
    2022-12-12
  • 浅析form标签中的GET和POST提交方式区别

    浅析form标签中的GET和POST提交方式区别

    在HTML中,form表单的作用是收集标签中的内容<form>...</form> 中间可以由访问者添加类似于文本,选择,或者一些控制模块等等.然后这些内容将会被送到服务端
    2021-09-09
  • python快速查找算法应用实例

    python快速查找算法应用实例

    这篇文章主要介绍了python快速查找算法,是一个比较经典的算法应用,有一定的借鉴价值,需要的朋友可以参考下
    2014-09-09
  • 用Python写漏洞验证脚本的代码

    用Python写漏洞验证脚本的代码

    这篇文章主要介绍了用Python写漏洞验证脚本,本文给大家分享完整实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • Python实现PS图像抽象画风效果的方法

    Python实现PS图像抽象画风效果的方法

    这篇文章主要介绍了Python实现PS图像抽象画风效果的方法,涉及Python基于skimage模块进行图像处理的相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • pycharm设置注释颜色的方法

    pycharm设置注释颜色的方法

    今天小编就为大家分享一篇pycharm设置注释颜色的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05

最新评论