cookbook 6.2 定义常量

任务:

需要定义一些模块级别的变量(比如命名的常量),而且客户代码无法将其重新绑定;

解决方案:

#coding = utf-8
class _const(object):
    class ConstError(TypeError): pass
    def __setattr__(self,name,value):
        if name in self.__dict__:
            raise self.ConstError,"Can‘t rebind const(%s)" % name
        self.__dict__[name] = value
    def __delattr__(self,name):
        if name in self.__dict__:
            raise self.ConstError,"Can‘t unbind const(%s)" % name
        raise NameError,name

import sys
sys.modules[__name__] = _const()

使用方法:

1、将以上代码保存为const.py,然后将该文件的目录添加到sys.path目录下;

2、然后运行const.py

3、在python shell中输入:

  import const

  #测试代码

  const.magic = 23

  备注:现在任何客户代码都可以导入const,并将const模块的一个属性绑定一次,但仅能绑定一次;

           一旦某属性已经被绑定,程序无法将其重新绑定或者解除绑定

const.magic = 99  #抛出const.ConstError

     del const.magic    #抛出const.ConstError

时间: 2024-10-05 04:04:14

cookbook 6.2 定义常量的相关文章

java中的关键字static(静态变量)和final定义常量

1 package point; 2 3 class Point { 4 5 int x = 0; 6 int y = 0; 7 static int z = 100; // 定义静态变量z,类变量 8 static final double PI = 3.1415926;// final定义常量,它的值在运行时不能被改变 9 10 Point(int a, int b) { 11 //PI=3.1415926; 12 /* 13 * 当使用静态常量的时候,不能在构造函数中初始化, 因为静态时,

js面向对象编程:如何定义常量?

js中有一个关键字const,但目前的浏览器似乎还不支持,如果一定要定义一些常量,其实可以使用闭包,匿名函数实现常量的定义. 例如: var Class = (function() { var UPPER_BOUND = 100;//定义了常量 var Test={}; // 定义了一个静态方法 获取常量的方法 Test.getUPPER_BOUND=function() { return UPPER_BOUND; } return Test; })(); 用法: var k=Class.get

php中const定义常量

const 常量 1.在定义时必须被初始值,2.前面不加任何修饰符3.变量名字母一般都大写4.常量可以被子类继承5.一个常量是属于一个类的,而不是某个对象的 作用:当某些值是固定不变的,就用const 1.const 定义的常量和define()定义的常量的区别? 希望一个成员变量不被修改 例如圆周率 3.1415926定义:const 常量名=值; 没有$符访问:类名 ::常量名 或 接口名::常量名 <?php defined('TEXT');检查一个名称的常量是否存在 class A{ c

iOS define 宏定义 和 const定义常量区别

const   const 是c++中的修饰符.  c++中常用来定义常量,修饰左值. #define 宏定义语句, 在预处理阶段直接做文本替换,不做类型检查. 它们之间的最大区别: 1.  对于const 变量,系统只给了一个相应的内存地址,而#define则是给出了一个立即数.因为const变量是存放在内存的静态区域中,所以在程序运行过程中const变量只有一个拷贝,而#define 所定义的宏变量却有多个拷贝,所以宏在程序运行过程中所消耗的内存要比const变量的大得多.#define所定

可以DEFINE 定义常量数组了

php7 可以define 定义常量数组了 利用php7的define定义数组 <?php define('language', ['php', 'java', 'jsp', 'asp']); echo language[1]; 输出java

C# 定义常量 两种实现方法

在C#中定义常量的方式有两种,一种叫做静态常量(Compile-time constant),另一种叫做动态常量(Runtime constant) 在C#中定义常量的方式有两种,一种叫做静态常量(Compile-time constant),另一种叫做动态常量(Runtime constant).前者用“const”来定义,后者用“readonly”来定义. 对于静态常量(Compile-time constant),它的书写方式如下: public const int MAX_VALUE =

python定义常量

常量是指一旦初始化后就不能修改的固定值.c++中使用const保留字指定常量,而python并没有定义常量的保留字.但是python是一门功能强大的语言,可以自己定义一个常量类来实现常量的功能. const.py 1 # -*- coding: utf-8 -*- 2 3 class _const: 4 class ConstError(TypeError) : pass 5 6 def __setattr__(self, key, value): 7 # self.__dict__ 8 if

php常量,提前定义常量,魔术常量及基本数据类型

常量 定义: 形式一 // define("PI",常量值); define("PI",3.14); define("school","讲理"); 形式二 // 定义形式二 const cc1 = 1234; const cc2 = "abcd"; 使用: 形式一 // 直接使用常量名 echo "PI的值:".PI; 形式二 // 通过constant函数,灵活性体现-->常量名

【转】Effective-Objective-C-读书笔记-Item-4-如何正确定义常量 -- 不错

原文网址:http://tutuge.me/2015/03/11/Effective-Objective-C-%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0-Item-4-%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E5%AE%9A%E4%B9%89%E5%B8%B8%E9%87%8F/ 前言 写博客果然比光看书要花时间=.=,书都快看完了,才写到第4节.但是总结一遍,的确印象深刻啊~~ 这次的主题是“常量”,非常常用,又非常重要的东西~良