目标是创建一个行为类似db结果集的模拟类。
例如,如果一个数据库查询返回,使用dict表达式{'ab':100, 'cd':200}
,那么我想看到:
>>> dummy.ab
100
一开始我想也许我可以这样做:
ks = ['ab', 'cd']
vs = [12, 34]
class C(dict):
def __init__(self, ks, vs):
for i, k in enumerate(ks):
self[k] = vs[i]
setattr(self, k, property(lambda x: vs[i], self.fn_readyonly))
def fn_readonly(self, v)
raise "It is ready only"
if __name__ == "__main__":
c = C(ks, vs)
print c.ab
但是c.ab
返回一个属性对象。
用k = property(lambda x: vs[i])
替换setattr
行根本没有用。
那么,在运行时创建实例属性的正确方法是什么呢?
附注:我知道在__getattribute__
方法是如何使用的?< / em >中提出了一个替代方案