Python实现Const详解

作者:hebedich 时间:2021-06-24 16:18:40 

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的区别

import module只是将module的name加入到目标文件的局部字典中,不需要对module进行解释
from module import xxx需要将module解释后加载至内存中,再将相应部分加入目标文件的局部字典中
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

标签:Python,Const
0
投稿

猜你喜欢

  • MySQL 8.0.19支持输入3次错误密码锁定账户功能(例子)

    2024-01-28 04:48:00
  • MySQL的存储函数与存储过程相关概念与具体实例详解

    2024-01-19 05:50:32
  • Python的轻量级ORM框架peewee使用教程

    2021-09-01 06:55:21
  • Python实现简单扫雷游戏

    2022-03-27 15:05:23
  • 使用Python的PIL模块来进行图片对比

    2022-04-28 19:18:36
  • mysql 单机数据库优化的一些实践

    2024-01-15 19:01:25
  • python 实现任务管理清单案例

    2023-09-01 04:59:17
  • php cli换行示例

    2024-05-03 15:50:59
  • ASP日期格式化函数

    2010-08-08 19:18:00
  • python+mysql实现教务管理系统

    2024-01-26 11:43:03
  • 一文搞懂Python中subprocess模块的使用

    2023-12-05 16:35:05
  • Python爬取门户论坛评论浅谈Python未来发展方向

    2021-10-26 19:09:12
  • 如何利用Python动态展示排序算法

    2022-03-06 17:23:48
  • mysql 重要日志文件汇总

    2024-01-28 20:34:55
  • Pycharm2022最新版无法换源解决方法

    2023-02-09 20:51:55
  • javascript实现简单的可随机变色网页计算器示例

    2024-04-16 09:37:07
  • CSS实例讲解:地图提示

    2007-05-11 17:04:00
  • 30行Python代码实现高分辨率图像导航的方法

    2021-03-23 04:11:37
  • Python3实现汉语转换为汉语拼音

    2022-02-28 11:27:54
  • ES6正则表达式扩展笔记

    2024-04-18 10:00:12
  • asp之家 网络编程 m.aspxhome.com