假设我们有一个类:
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?
假设我们有一个类:
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?
您需要做两件事:声明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
类通过属性访问(运算符)查找字典键.
。