来自对象字段的Python字典
您是否知道是否有内置函数可以从任意对象构建字典?我想做这样的事情:
>>> class Foo:
... bar = 'hello'
... baz = 'world'
...
>>> f = Foo()
>>> props(f)
{ 'bar' : 'hello', 'baz' : 'world' }
注意:它不应包含方法。仅字段。
-
请注意,Python 2.7中的最佳实践是使用新型类(Python 3不需要),即
class Foo(object): ...
同样,“对象”和“类”之间也存在差异。要从任意对象构建字典,只需使用即可
__dict__
。通常,您将在类级别声明方法,并在实例级别声明属性,因此__dict__
应该没问题。例如:>>> class A(object): ... def __init__(self): ... self.b = 1 ... self.c = 2 ... def do_nothing(self): ... pass ... >>> a = A() >>> a.__dict__ {'c': 2, 'b': 1}
更好的方法(由robert建议在注释中使用)是内置vars函数:
>>> vars(a) {'c': 2, 'b': 1}
另外,根据您要执行的操作,最好继承自dict。那么您的课程已经是字典,并且如果您愿意,可以覆盖getattr和/或setattr调用并设置字典。例如:
class Foo(dict): def __init__(self): pass def __getattr__(self, attr): return self[attr] # etc...