来自对象字段的 Python 字典

新手上路,请多包涵

你知道是否有一个内置函数可以从任意对象构建字典吗?我想做这样的事情:

 >>> class Foo:
...     bar = 'hello'
...     baz = 'world'
...
>>> f = Foo()
>>> props(f)
{ 'bar' : 'hello', 'baz' : 'world' }

注意: 它不应该包括方法。只有字段。

原文由 Julio César 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 511
2 个回答

请注意,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}

更好的方法( 罗伯特 在评论中建议)是内置的 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...

原文由 user6868 发布,翻译遵循 CC BY-SA 3.0 许可协议

而不是 x.__dict__ ,实际上使用 vars(x) 更符合pythonic。

原文由 Berislav Lopac 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏