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

假设以下情况:


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

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


繁星点点滴滴
浏览 159回答 1
1回答

aluckdog

那并没有按照您的想法做:每次都得到第一个要素。由于所有级别都称为“参考”,因此它似乎只能工作。如果您将它们称为“ foo.bar.baz”,它将失败。您每次实际上需要使用上一次迭代中的元素:def get_ref(ref_attr):    item = f    for attr in ref_attr.split('.'):        item = getattr(item, attr)        print item但是,没有内置的方法可以做到这一点。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python