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实例

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

立即学习“Python免费学习笔记(深入)”;

复制代码 代码如下:
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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2292482.html

(0)
上一篇 2025年2月28日 01:49:42
下一篇 2025年2月25日 03:26:43

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Python标准异常和异常处理详解

    python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误。你可以使用该功能来调试python程序。 1.异常处理: 本站Python教程会具体介绍。2.断言(Assertions):本站Python教程会具体介绍。…

    编程技术 2025年2月28日
    200
  • python映射列表实例分析

    本文实例讲述了python映射列表。分享给大家供大家参考。具体分析如下: 列表映射是个非常有用的方法,通过对列表的每个元素应用一个函数来转换数据,可以使用一种策略或者方法来遍历计算每个元素。 例如: 复制代码 代码如下:params = {…

    编程技术 2025年2月28日
    200
  • Python操作MySQL简单实现方法

    本文实例讲述了python操作mysql简单实现方法。分享给大家供大家参考。具体分析如下: 一、安装: 安装MySQL 安装MySQL不用多说了,下载下来安装就是,没有特别需要注意的地方。 一个下载地址:点击打开链接 立即学习“Python…

    编程技术 2025年2月28日
    200
  • Python中的is和id用法分析

    本文实例讲述了python中的is和id用法。分享给大家供大家参考。具体分析如下: (ob1 is ob2) 等价于 (id(ob1) == id(ob2)) 首先id函数可以获得对象的内存地址,如果两个对象的内存地址是一样的,那么这两个对…

    编程技术 2025年2月28日
    200
  • Python的另外几种语言实现

    python自身作为一门编程语言,它有多种实现。这里的实现指的是符合python语言规范的python解释程序以及标准库等。这些实现虽然实现的是同一种语言,但是彼此之间,特别是与cpython之间还是有些差别的。 下面分别列出几个主要的实现…

    编程技术 2025年2月28日
    200
  • Python中的tuple元组详细介绍

    tuple 是不可变 list。 一旦创建了一个 tuple 就不能以任何方式改变它。 Tuple 与 list 的相同之处 定义 tuple 与定义 list 的方式相同, 除了整个元素集是用小括号包围的而不是方括号。Tuple 的元素与…

    编程技术 2025年2月28日
    200
  • Python的批量远程管理和部署工具Fabric用法实例

    本文实例讲述了python的批量远程管理和部署工具fabric用法。分享给大家供大家参考。具体如下: Fabric是Python中一个非常强大的批量远程管理和部署工具,常用于在多个远程PC上批量执行SSH任务. 常见的使用方法大概总结如下:…

    编程技术 2025年2月28日
    200
  • Python中实现常量(Const)功能

    python语言本身没有提供const,但实际开发中经常会遇到需要使用const的情形,由于语言本身没有这种支出,因此需要使用一些技巧来实现这一功能 定义const类如下 复制代码 代码如下:import sys class Const(o…

    编程技术 2025年2月28日
    200
  • Python写的服务监控程序实例

    前言: Redhat下安装Python2.7 rhel6.4自带的是2.6, 发现有的机器是python2.4。 到python网站下载源代码,解压到Redhat上,然后运行下面的命令: 复制代码 代码如下:# ./configure &#…

    编程技术 2025年2月28日
    200
  • 17个Python小技巧分享

    1.交换变量 复制代码 代码如下: 立即学习“Python免费学习笔记(深入)”; x = 6y = 5 x, y = y, x print x>>> 5print y>>> 6 2.if 语句在行内 复…

    编程技术 2025年2月28日
    200

发表回复

登录后才能评论