MFB*_*MFB 5 python attributes class
我知道我可以使用这样的字符串获取Class的属性:
object.attribute = 'foo'
x = 'attribute'
getattr(object, x)
>>> 'foo'
Run Code Online (Sandbox Code Playgroud)
有没有办法用字符串"深入"对象的属性?换句话说,如果我的对象包含另一个对象,我如何用字符串获取子对象的属性?例如:
object.object.attribute
Run Code Online (Sandbox Code Playgroud)
该operator.attrgetter功能执行此操作:
class Foo: pass
f = Foo()
f.bar = Foo()
f.bar.baz = Foo()
f.bar.baz.quux = "Found me!"
import operator
print operator.attrgetter("bar.baz.quux")(f) # prints "Found me!"
Run Code Online (Sandbox Code Playgroud)
我喜欢这个链接中给出的配方(实际上评论甚至更好)
借用Claudiu的回答(也很棒):
class Foo: pass
f = Foo()
f.bar = Foo()
f.bar.baz = Foo()
f.bar.baz.quux = "Found me!"
Run Code Online (Sandbox Code Playgroud)
跟随点的递归getattr:
>>> rgetattr = lambda o,a: reduce(getattr, a.split('.'), o)
>>> rgetattr(f, 'bar.baz.quux')
'Found me!'
Run Code Online (Sandbox Code Playgroud)
非lambda版本是:
def rgetattr(obj, attr):
return reduce(getattr, attr.split('.'), obj)
Run Code Online (Sandbox Code Playgroud)