0

让我们假设,以下情况:

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()

尝试打印(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

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

谢谢。

4

1 回答 1

1

这不是你想的那样:它每次都得到第一个元素。它似乎只起作用,因为所有级别都称为“ref”。如果你称它们为“foo.bar.baz”,它会失败。您每次都需要实际使用上次迭代中的元素:

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

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

于 2013-06-14T09:25:39.627 回答