python - 将多个方法应用于单个对象?
问题描述
同时将输出保存在数据结构中以供以后检查。这些方法返回字符串(解析或选择 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
有效。获得(而不是硬编码) “模型”作为对象的更多信息是“结果”。
解决方案
您想要两种绑定方法:
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)()
推荐阅读
- java - 正则表达式中是否有任何 NOT 运算符
- ios - Not able to convert date to Today or Yesterday using date formatter in Swift
- python - 在流式传输数据时并行运行代码块
- office365 - 如何启用在 SharePoint 默认列表视图中显示动态创建列
- python - 应该使用 Pandas 或 Sklearn 进行插补/归一化等吗?
- acumatica - 在 Acumatica 中按事件动态更改 PXSelector
- python - for i in range(len(val)): TypeError: 'numpy.float64' 类型的对象没有 len()
- node.js - 如何在节点 js 中创建正则表达式?
- c# - WPF 复选框更改
- python-3.x - 如何在 Python 中使用 re.sub