我们假设,以下情况:
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
我不知道自己,是否是另一种方法,或者我可以使用的内置方法。
感谢。
答案 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
但不,没有内置的方法可以做到这一点。