我曾经使用reduce and getattr函数以链式方式调用属性,如“这个属性。那个属性。布拉塔"
即:
reduce(getattr, 'xattr.yattr.zattr'.split('.'), myobject)
工作非常好,但是现在我有了一个新的要求,我的字符串可以像这样调用一个特定数量的属性:“这个属性。那个属性[2] “布拉塔”
^{pr2}$
现在它不工作了,我得到xattr object has no attribute 'yattr[2]'
错误。在
对于这两种情况,哪种方法都有效,哪一种解决方法都很简单呢?在
问候
Tags:
你可以试试:
注意,它假设
[…]
内的内容是一个非负的十进制数。在如果您关心性能,在我的测试中,它仍然比
^{pr2}$eval
快:z.py
的内容:您所要求的似乎相当困难,因为您希望将属性选择与方法调用混合起来(因为索引只是调用的糖分)。通过使用getattr为您提供一个绑定方法,调用函数非常容易,但是您需要将字符串中包含参数的部分转换为实际参数。在
既然您无论如何都需要eval()来计算参数,那么为什么不全部求值呢?在
你的例子是:
^{pr2}$稍后,您可能希望调用某个方法而不是获取属性。快速地重新实现python方法的某些部分将成为一场噩梦。即使当前的getattr/getitem支持需求也不能作为一个行程序来解决。在
相反,您可以使用python本身来解释python
相关问题 更多 >
编程相关推荐