来自对象字段的Python字典

发布于 2021-01-29 19:28:59

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

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

注意:它不应包含方法。仅字段。

关注者
0
被浏览
49
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看