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

在python中获取动态属性

东方飞捷
2023-03-14
问题内容

我有一个带有 属性或 特殊 属性的对象,该属性可以用三种不同的方式命名(注意:我不控制生成该对象的代码)

属性中的值(取决于设置的是哪个)完全相同,我需要获取该值以进行进一步处理,因此根据数据源,我可以得到类似以下内容的值:

>>> obj.a
'value'
>>> obj.b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'b'
>>> obj.c
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'c'

要么

>>> obj.a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'a'
>>> obj.b
'value'
>>> obj.c
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'c'

要么

>>> obj.a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'a'
>>> obj.b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: Obj instance has no attribute 'b'
 >>> obj.c
'value'

我对获取感兴趣,但'value'不幸的__dict__是,该对象中不存在属性。因此,我为获得该价值而结束的工作只是打了一堆getattr电话。假设可能性只有三种,则代码如下所示:

>>> g = lambda o, l: getattr(o, l[0], getattr(o, l[1], getattr(o, l[2], None)))
>>> g(obj, ('a', 'b', 'c'))
'value'

现在,我想知道是否有更好的方法?因为我100%相信我所做的事情:)

提前致谢


问题答案:

怎么样:

for name in 'a', 'b', 'c':
    try:
        thing = getattr(obj, name)
    except AttributeError:
        pass
    else:
        break


 类似资料:
  • 还有一个Java问题(我是noob,我知道):在自定义控件中使用动态属性绑定,在JavaBean中使用动态属性getter,可能吗? 我会解释的。我在自定义控件中广泛使用此功能: 这用于将数据源和字段名称作为参数传递的控件中。这工作,到目前为止还不错。现在,在某些情况下,数据源是托管bean。当解释上述行时,显然会生成代码来获取或设置...某物的值。但具体是什么呢? 我得到这个错误:从com类型的

  • 问题内容: 我有这个: 一个字符串变量,其中包含类名() 一个具有属性名称()的字符串变量 我想从该类中获取该属性,问题是该属性是静态的,我不知道该怎么做。 如果该属性不是静态的,则可能是: 如果属性是一个方法,我本可以使用call_user_function 但就我而言,我只是迷路了。但是,我希望这是可能的。有了PHP所具有的数千个功能,他最好为此也有所准备。也许我缺少什么? 谢谢! 编辑: 对

  • 单条 GET /feeds/:feed Response Status: 201 OK { "id": 13, "created_at": "2017-06-21 01:54:52", "updated_at": "2017-06-21 01:54:52", "deleted_at": null, "user_id": 1, // 发布动态的用户 "feed_conte

  • 问题内容: 假设我创建了一个类的实例,并想为其公共属性分配一些值。通常,这将是这样完成的: 但是,如果编写一个将类作为参数的函数,而我想动态地为该类的公共属性分配一些值,那就是通过变量和循环(不知道有多少个或被称为什么)。 ) 显而易见的是: 但这是行不通的。 有任何想法吗? 问题答案:

  • 我使用查询DSL生成实体EntitySerializer,以便使用QueryDSL(与SpringData集成)查询JPA实体。

  • 问题内容: 实际上,我使用的是xlrd模块0.8版本,但我不知道如何读取单元格属性,例如背景色,字体以及单元格是否被锁定。 我尝试使用 它引发一个错误,指出在读取时需要设置格式化信息,但是如果我有该参数,则表明它仍未实现。 是否有另一个模块,或者该模块本身如何读取单元格属性? 问题答案: 以下内容使用xlrd 0.7.6版对我有效: 是XF类的实例;参见https://secure.simplis