首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何为类动态添加属性?

如何为类动态添加属性?
EN

Stack Overflow用户
提问于 2009-08-25 01:53:33
回答 20查看 316.8K关注 0票数 269

目标是创建一个mock类,它的行为类似于db结果集。

例如,如果数据库查询使用dict表达式{'ab':100, 'cd':200}返回,那么我希望看到:

代码语言:javascript
复制
>>> dummy.ab
100

一开始我想也许我可以这样做:

代码语言:javascript
复制
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行根本没有任何用处。

那么在运行时创建实例属性的正确方法是什么呢?

附注:我知道在 中有一种替代方案

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1325673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档