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_Python实现Const详解相关推荐

  1. python波形图librosa_对python中Librosa的mfcc步骤详解

    对python中Librosa的mfcc步骤详解 发布时间:2020-10-18 23:55:35 来源:脚本之家 阅读:71 作者:qq_39239990 1.对语音数据归一化 如16000hz的数 ...

  2. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

  3. Python中的select、epoll详解

    Python中的select.epoll详解 文章目录 Python中的select.epoll详解 一.select 1.相关概念 2.select的特性 1.那么单进程是如何实现多并发的呢??? ...

  4. python中pandas安装视频教程_详解Python中pandas的安装操作说明(傻瓜版)

    很多人来问我pandas的安装(python数据分析里面的必修课) 步骤如下: 安装python的时候,把路径加到系统里,这样,随时可以用pip 路径添加方法: 查找路径: 路径1: 2.例如: 即: ...

  5. Python中random模块生成随机数详解

    Python中random模块生成随机数详解 本文给大家汇总了一下在Python中random模块中最常用的生成随机数的方法,有需要的小伙伴可以参考下 Python中的random模块用于生成随机数. ...

  6. python中plt定义,对Python中plt的画图函数详解

    1.plt.legend plt.legend(loc=0)#显示图例的位置,自适应方式 说明: 'best' : 0, (only implemented for axes legends)(自适应 ...

  7. python中selenium模块驱动谷歌详解

    python中selenium模块驱动谷歌详解 Selenium的介绍.配置和调用 Selenium(浏览器自动化测试框架) 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中 ...

  8. python中的subprocess.Popen()使用详解---以及注意的问题(死锁)

    从python2.4版本开始,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值. subprocess意在替代其他几个老的模块或者函数 ...

  9. python中的True 和 False详解

    python中的True 和 False详解 参考 [1] https://docs.python.org/3/library/stdtypes.html#truth 中的Truth Value Te ...

最新文章

  1. css position属性
  2. leetcode287. Find the Duplicate Number
  3. ArcGis For Flex 之 QueryTask地理坐标展现【原创】
  4. 字典树(Trie树)
  5. 【Jetson Nano学习笔记】2. ORB-SLAM3及ZED 2i驱动安装
  6. 织梦cms响应式站长导航分类网站模板(自适应手机版)
  7. http response 返回 没有内容_HTTP 教程2
  8. [转]Vue生态系统中的库
  9. 基于MODBUS-RTU协议的串口编程
  10. 0723电话面试整理
  11. UDP实时图像传输进阶篇——1080P视频传输
  12. vue 登录 动态树 表格 cud
  13. 定制约玩软件、开发陪玩系统,需要多少钱?
  14. uniapp微信小程序实现连接低功耗蓝牙打印功能
  15. Blender 利用遮罩剔除顶点
  16. # Logistics Regression
  17. git push失败:Unable to access 'https://gitee.com/Lmui/proxy.git/': Could not resolve host: gitee.com
  18. latex 分页_latex 排版 首页不会换页
  19. 搭建私人kindle图书馆,并内网穿透实现公网访问
  20. 从零学Java(2)之搭建开发环境

热门文章

  1. gRPC应用demo--复杂proto文件编写
  2. 【FPGA教程案例39】通信案例9——基于FPGA的交织-解交织数据传输
  3. 大作业:多功能的记事本程序设计
  4. Python爬虫之scrapy高级(全站爬取,分布式,增量爬虫)
  5. 你不厉害, 是因为还不够努力
  6. 关于SurfaceView创建时,surfaceCreated调用的问题
  7. fluent质量流量入口边界条件设置
  8. EFT试验复位案例分析
  9. ZYS的黄金——解题报告
  10. netsh_windows命令行管理网络/连接wifi@重启网卡