作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有类似的东西:
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/
我是一名优秀的程序员,十分优秀!