gpt4 book ai didi

python - 如何在 asdict 中获取@property 方法?

转载 作者:行者123 更新时间:2023-12-03 22:14:41 25 4
gpt4 key购买 nike

我有类似的东西:

from attr import attrs, attrib

@attrs
class Foo():
max_count = attrib()
@property
def get_max_plus_one(self):
return self.max_count + 1
现在当我这样做时:
f = Foo(max_count=2)
f.get_max_plus_one =>3
我想将其转换为 dict:
{'max_count':2, 'get_max_plus_one': 3}
当我使用 attr.asdict(f) 时,我没有得到 @property 。我只得到 {'max_count':2}
实现上述目标的最干净方法是什么?

最佳答案

对于这种情况,您可以在对象上使用 dir,并仅获取不以 __ 开头的属性,即忽略魔术方法:

In [496]: class Foo():
...: def __init__(self):
...: self.max_count = 2
...: @property
...: def get_max_plus_one(self):
...: return self.max_count + 1
...:

In [497]: f = Foo()

In [498]: {prop: getattr(f, prop) for prop in dir(f) if not prop.startswith('__')}
Out[498]: {'get_max_plus_one': 3, 'max_count': 2}

要处理不以 __ 开头的常规方法,您可以添加一个 callable 测试:
In [521]: class Foo():
...: def __init__(self):
...: self.max_count = 2
...: @property
...: def get_max_plus_one(self):
...: return self.max_count + 1
...: def spam(self):
...: return 10
...:

In [522]: f = Foo()

In [523]: {prop: getattr(f, prop) for prop in dir(f) if not (prop.startswith('__') or callable(getattr(Foo, prop, None)))}
Out[523]: {'get_max_plus_one': 3, 'max_count': 2}

关于python - 如何在 asdict 中获取@property 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51733882/

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