获取引用对象的最佳方法是什么(变量级别)

时间:2013-06-14 09:16:57

标签: python getattr

我们假设,以下情况:

class foo(object):
    def __init__(self, ref=None):
        self.ref = ref

    def __str__(self):
        return "I'm foolish"

f = foo()
f.ref = foo()
f.ref.ref = foo()
f.ref.ref.ref = foo()

尝试     print(getattr(f,“ref.ref.ref”))

引发'foo'对象没有属性'ref.ref.ref'

所以,我用以下函数解决了这个问题:

def get_ref(ref_attr):
    for attr in ref_attr.split('.'):
        print(getattr(f, attr))

get_ref("ref.ref.ref") retruns the expected result:
I'm foolish
I'm foolish
I'm foolish

我不知道自己,是否是另一种方法,或者我可以使用的内置方法。

感谢。

1 个答案:

答案 0 :(得分:1)

这不符合你的想法:它每次都获得第一个元素。它似乎只能工作,因为所有级别都被称为“ref”。如果你称他们为“foo.bar.baz”,它就会失败。您需要每次实际使用上次迭代中的元素:

def get_ref(ref_attr):
    item = f
    for attr in ref_attr.split('.'):
        item = getattr(item, attr)
        print item

但不,没有内置的方法可以做到这一点。