【发布时间】:2017-05-17 22:39:35
【问题描述】:
假设我有一个 Python 类,其中包含在构造函数中创建的属性和使用 property 装饰器创建的计算属性的混合:
class Example:
def __init__(self):
self.foo = 1
@property
def bar(self):
return 2
def baz(self, x):
return x * x
我想生成一个包含这两种属性的字典,但没有别的。但是,如果我这样做vars(Example()),我只会得到foo。如果我这样做dir(Example()),我会同时得到foo 和bar,但也会得到baz 和大量其他垃圾。
是否可以自动生成这样的字典?我想我必须覆盖__dict__?也许通过调用dir 并以某种方式过滤掉不感兴趣的部分?
我想避免手动枚举所有属性。
【问题讨论】:
-
foo是一个属性,而不是一个属性。 -
不确定是否足够,但所有“垃圾”都以 __ 开头,为什么不过滤呢?
[i for i in dir(x) if not i.startswith("__")] -
“我想我必须覆盖
__dict__” - 不要那样做。它打破了太多的期望和太多的代码。他们用namedtuple尝试过,这是个坏主意,他们不得不改回来。 -
@juanpa.arrivillaga 我不知道有什么区别。感谢您指出。
-
@JosepValls 如果我添加一个方法,它将被包括在内,因为它不是以
__开头的。也许我应该过滤掉所有功能?
标签: python class dictionary