当前位置: 首页 > 面试题库 >

来自对象字段的Python字典

茹高义
2023-03-14
问题内容

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

>>> 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...


 类似资料:
  • 我的一个POJO有一个布尔对象字段,允许在数据库中输入空值(这是一个要求)。是否可以在类级别使用@data Lombok注释,同时重写Boolean字段的getter?它生成的默认值是布尔字段的getXXX方法。我希望将其重写为isXXX()?

  • 我有三个输入,我想添加,当我把我的第一个数字"5"console.log显示"0"下一个输入字段我输入"2"这将console.log第一个输入字段的数字"5"第三个我输入我在“7”console.log看到的“5”。 为什么会发生这种情况,我该如何解决它。 JavaScript.

  • 问题内容: 我在使用下表的Postgres 9.4中工作: 我有以下查询: 它为我提供了带有JSON对象的结果: 相反,我想将JSON结果展平为一系列命名空间的键,因此结果如下所示: 这可能吗? 问题答案: 这种特殊情况 下面的函数基于表动态创建视图: 首先,从查询中创建一个表。 接下来,使用函数,该函数将创建一个以postfix 表命名的视图: 最后,查询视图: 通用解决方案(适用于jsonb)

  • 我想寻求一些帮助。我是APEX的新手,我面临的问题是APEX触发器似乎是一个解决方案。我需要Salesforce中的一个触发器,该触发器将使用Staff对象(自定义对象)的值from Holidays Remaining字段更新位于Users对象(standard对象)中的字段。换言之,应将员工剩余假期中填充的内容复制到名为“用户剩余假期”的字段中。谁能帮我一下吗?

  • 我已经搜索和尝试了许多答案,但我似乎无法让这个工作。我在MongoDB中有一个用户(db.users...)我试图在一个特定的文档中更新一个名为“角色”的字段。如果我执行: assert失败:需要对象错误:在printStackTrace(src/mongo/shell/utils.js:37:15)在doassert(src/mongo/shell/assert.js:6:5)在assert(s

  • 我有一个前端ACF表单-ACF_表单()。使用post对象字段。我想通过自定义字段限制查询结果。下面的代码可以正常工作,除了当我尝试在搜索栏中键入时,会出现以下错误:我得到的错误是ajax响应中的PHP错误; 0:“PhpConsole\Handler”- 1:"strpos()" 2:"acf_order_by_search()" 3:“acf_field_post_object- 4:“acf