python const_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__ = value

def __getattr__(self, key):

if self.__dict__.has_key(key):

return self.key

else:

return None

sys.modules = Const()

使用sys.modules可以获取一个模块对象,并可以通过该对象获取模块的属性,这儿使用了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 = 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 = Const(),此时const模块已经加载进入内存,系统字典中也已经有了Const对象,随后既可以使用Const实例了

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

代码如下:

from project.apps.project_consts import const

print const.MAIL_PROTO_IMAP

免责申明:本栏目所发资料信息部分来自网络,仅供大家学习、交流。我们尊重原创作者和单位,支持正版。若本文侵犯了您的权益,请直接点击提交联系我们,立刻删除!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值