python 一个小技巧
在python中,我们习惯用dict来配置数据,如下:
Config = {
"version" : "1.0",
"author" : "bravf"
}
并且以Config["version"]的方式来访问,好吧,搞Js的同学表示他太罗嗦了,Js可以Config.version,在python中这样访问会抛出异常:"'dict' object has no attribute 'version'", 看来,python中的"."运算符并不能用来访问键值对,只能访问一个类上的自有属性。那么转化一下吧:
#-------------------------------------------------------------------- # 说明:把dict形式的配置改成基于class的属性访问 # 好处:用"."运算符来访问 #-------------------------------------------------------------------- class EasyObj(object):pass def DictToClass(_dict): obj = EasyObj() for m,n in _dict.iteritems() : setattr(obj,m,n) return obj #end def
没多大的用处,只是希望能少写一些字符。
---------------------------分隔符-------------------------------------------------
好吧,上面的代码遇到这样的情况就歇菜了:
Config = {
"version" : "1.0",
"author" : "bravf",
"account" : {
"user" : "bravf",
"pwd" : "bravf",
"language" : ["英语","日语"]
},
"a" : {
"a_0" : "a_0",
"a_1" : "a_1",
"a_2" : {
"a_2_0" : "a_2_0"
}
}
}
因为没有深度遍历,加上递归搞定他:
#--------------------------------------------------------------------
# 说明:把dict形式的配置改成基于class的属性访问
# 好处:用"."运算符来访问
#--------------------------------------------------------------------
class EasyObj(object):pass
def DictToClass(_dict):
obj = EasyObj()
for m,n in _dict.iteritems() :
if type(n) == type({}) : n = DictToClass(n)
setattr(obj,m,n)
#end for
return obj
#end def
