Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';获取引用对象(变量级别)的最佳方法_Python_Getattr - Fatal编程技术网

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

Python 什么';获取引用对象(变量级别)的最佳方法,python,getattr,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() 尝试 打印(getattr(f,“ref.ref.ref”)) 引发“foo”对象没有属

让我们假设以下情况:

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
我想知道自己,是不是有另一种方法可以做到这一点,还是我可以使用的内置方法


谢谢。

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

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

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

reduce(getattr,属性名称,对象)
太好了,@Bakuriu。出于某种原因,我从未想过使用
reduce