首页 > 解决方案 > 将多个方法应用于单个对象?

问题描述

同时将输出保存在数据结构中以供以后检查。这些方法返回字符串(解析或选择 HTML,它们不修改对象)。

我通过创建一个目前不是很有动力的类找到了一个“硬编码”解决方案:使用 list comprehension 调用函数列表

[也许另一个图书馆检查图书馆将是一个极端。我试图在 Python 源代码中打印一些内容,但它没有服从我。似乎另一个实例正在运行]

我已经尝试过这种语法(不可能):

result = [obj.f() for f in [append, attrs]] 

因为append并且attrs默认情况下不是静态函数,而是如上所示的“点”。

目标只是简单检查所有 obj 方法。

[强烈建议编辑]

更新

在 [122] 中:getattr? 文档字符串:getattr(object, name[, default]) -> value

从对象中获取命名属性;getattr(x, 'y') 等价于 xy 给定默认参数时,当属性不存在时返回;没有它,在这种情况下会引发异常。类型:builtin_function_or_method 在此处输入图像描述 getattr():属性名必须是字符串 在此处输入图像描述2有效。获得(而不是硬编码) 在此处输入图像描述 “模型”作为对象的更多信息是“结果”。

标签: python

解决方案


您想要两种绑定方法:

result = [f() for f in [obj.append, obj.attrs]]

或通过以下任一方式进行动态属性查找getattr

result = [getattr(obj, m)() for m in ["append", "attrs"]]

如果您打算对很多对象执行此操作,您可能需要使用operator.methodcaller

methods = [methodcaller(m) for m in ["append", "attrs"]]
results_for_obj_a = [f(obj_a) for f in methods]
results_for_obj_b = [f(obj_b) for f in methods]
# etc.

methodcaller是一种从任何特定对象中抽象出调用方法的想法的方法。

methodcaller(method_name)(obj) == getattr(obj, method_name)()

推荐阅读