猿问

如何动态地向类添加属性?

如何动态地向类添加属性?

目标是创建一个类似于db结果集的模拟类。

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

>>> dummy.ab100

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

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返回属性对象。

替换setattr与.成直线k = property(lambda x: vs[i])根本没用。

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

P.S.我知道在怎么样?__getattribute__使用的方法?


翻阅古今
浏览 538回答 3
3回答

qq_花开花谢_0

目标是创建一个类似于db结果集的模拟类。所以,你想要的是一本字典,你能把a[‘b’]拼成A.B吗?这很简单:class atdict(dict):     __getattr__= dict.__getitem__     __setattr__= dict.__setitem__     __delattr__= dict.__delitem__
随时随地看视频慕课网APP

相关分类

Python
我要回答