2

假设我们有一个类:

class Foo (object):
...     def __init__(self,d):
...         self.d=d
...     def return_d(self):
...         return self.d

...和一个字典:

d={'k1':1,'k2':2}

...和一个例子:

inst=Foo(d)

有没有办法动态添加属性return_d

inst.return_d.k1会返回 1?

4

1 回答 1

9

您需要做两件事:声明return_d为属性或属性,并返回一个类似字典的对象,该对象允许对字典键进行属性访问。以下将起作用:

class AttributeDict(dict): 
    __getattr__ = dict.__getitem__

class Foo (object):
    def __init__(self,d):
        self.d=d

    @property
    def return_d(self):
        return AttributeDict(self.d)

简短演示:

>>> foo = Foo({'k1':1,'k2':2})
>>> foo.return_d.k1
1

property装饰器将方法转换为属性,__getattr__钩子允许AttributeDict类通过属性访问(运算符)查找字典键.

于 2012-09-13T10:09:23.483 回答