python getattr多个级别,也传递了值

时间:2014-10-30 21:07:44

标签: python

所以我一直在阅读getattr,并想知道相当于什么

example = val1.val2.val3(item)

会。 所以我得到你必须使用嵌套的getattr来实现多个级别的属性

example = getattr(getattr(val1, "val2"), "val3")

但是如何表示传入的对象?

2 个答案:

答案 0 :(得分:1)

你几乎就在那里:

val3 = getattr(getattr(val1, "val2"), "val3")
example = val3(item)

# Or simply:
example = getattr(getattr(val1, "val2"), "val3")(item)

答案 1 :(得分:0)

或者您可以使用标准库operator.attrgetter中的简洁函数。这是一个有关如何使用它的小例子。

from operator import attrgetter

from collections import namedtuple

# Define some objects
Foo = namedtuple('Foo', 'attr')
Bar = namedtuple('Bar', 'subattr1')

instance = Foo(attr=Bar('this_is_my_value'))

retriever = attrgetter('attr.subattr1')
result = retriever(instance)
print(result)

执行此操作会给你

this_is_my_value