gpt4 book ai didi

Python 类 : adding dynamic attributes to methods

转载 作者:行者123 更新时间:2023-11-28 20:08:49 26 4
gpt4 key购买 nike

假设我们有一个类:

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 声明为属性或特性,并返回一个类似 dict 的对象,该对象允许对字典键进行属性访问。以下将起作用:

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 decorator将方法变成属性,__getattr__ hook允许 AttributeDict 类通过属性访问(. 运算符)查找字典键。

关于Python 类 : adding dynamic attributes to methods,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12403843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com