我在python 2.6上运行了以下函数,但是appengine的生产环境是2.5并且它会爆炸:
AttributeError:'module'对象没有属性'Mapping'
有没有人有2.5的解决方案?
由于
克里斯
import types, collections
class AttrDict(dict):
'''AttrDict - dict with JS-like key=attr access'''
def __init__(self, *argz, **kwz):
if len(argz) == 1 and not kwz and isinstance(argz[0], types.StringTypes):
super(AttrDict, self).__init__(open(argz[0]))
else:
super(AttrDict, self).__init__(*argz, **kwz)
for k,v in self.iteritems(): setattr(self, k, v) # re-construct all values via factory
def __val_factory(self, val):
return AttrDict(val) if isinstance(val, collections.Mapping) else val
def __getattr__(self, k):
return super(AttrDict, self).__getitem__(k)
__getitem__ = __getattr__
def __setattr__(self, k, v):
return super(AttrDict, self).__setitem__(k, self.__val_factory(v))
__setitem__ = __setattr__
答案 0 :(得分:3)
尝试替换
isinstance(val, collections.Mapping)
与
isinstance(val, dict)
答案 1 :(得分:1)
该函数永远不会获得一个Mapping
实例的参数,因为该类不在python 2.5中。只需将该行替换为return val
。
这假设您的其他代码都没有使用Mapping
或其子类。如果你真的在使用它,你将不得不想出一个替代品。