在项目工程Lib 下 定义const.py文件
代码文件为如下:
使用sys.modules[name]可以获取一个模块对象,并可以通过该对象获取模块的属性,这儿使用了sys.modules向系统字典中注入了一个Const对象
从而实现了在执行import const时实际获取了一个Const实例的功能 sys.modules[name] = Const()这条语句将系统已加载的模块列表中的const替换为了Const(),即一个Const实例 python语言本身没有提供const,但实际开发中经常会遇到需要使用const的情形,由于语言本身没有这种支出,因此需要使用一些技巧来实现这一功能 定义const类如下
PS: self.__dict__.has_key(name) 是旧版本写法,3.6版本请用 name in self.__dict__
#coding=utf-8 import sys class Const(object): class ConstError(TypeError):pass class ConstCaseError(ConstError): pass def __setattr__(self, name, value): if name in self.__dict__: raise self.ConstError("can not rebind const (%s)" %name) self.__dict__[name]=value def __delattr__(self, name): if name in self.__dict__: raise self.ConstError("can not unbind const (%s)" %name) raise NameError(name) def __getattr__(self, name): if name in self.__dict__: return self.name else: return None sys.modules[__name__]=Const() import const const.USER_NAME='Jack' const.EMAIL='Jack@alibaba.com'
调用测试代码如下:
注意import 和from x import y的区别
import const print(const.USER_NAME+' '+const.EMAIL)