我想知道哪种是从相同类型的对象列表中获取属性的最佳方法.有没有比for循环更有效的解决方案?我尝试使用getattr,但没有使用列表.
只是为了说清楚.假设我已经定义了一个带有属性的类FooBar
class Foo():
def __init__(self, Bar):
self.bar = Bar
A = Foo(5)
B = Foo(6)
C = [A,B]
Run Code Online (Sandbox Code Playgroud)
我是否可以Bar为整个列表同时获取属性以使最终结果为值为[5,6]的列表?谢谢你的帮助
Jon*_*nts 10
你可以使用list-comp:
C = [obj.Bar for obj in (A, B)]
Run Code Online (Sandbox Code Playgroud)
或者:
from operator import attrgetter
C = map(attrgetter('Bar'), (A, B))
Run Code Online (Sandbox Code Playgroud)
注意:它不是严格" 同时 ",而是逐个循环遍历对象就像它一样好.另请注意,对象甚至不需要是同一类型 - 它们只需要具有属性Bar.getattr 如果该属性不存在,您可以使用它来返回默认值:
C = [getattr(obj, 'Bar', None) for obj in (A, B)]
Run Code Online (Sandbox Code Playgroud)
或者,如果要丢弃没有该属性而不是默认值的项目:
C = [obj.Bar for obj in (A, B) if hasattr(obj, 'Bar')]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
166 次 |
| 最近记录: |