python - 对变量执行一系列操作
问题描述
我需要执行我对变量定义的一系列操作。例如,我有变量a
,链应该是这样的:
a.someAction1(some parameters).someAction2(some parameters).someAction2(some parameters).someAction2(some parameters)
所以这里.someAction1(some parameters)
将a
作为第一个参数并执行.someAction1(some parameters)
. After.someAction2(some parameters)
使用的结果.someAction1(some parameters)
作为第一个参数并执行定义的一些动作.someAction2(some parameters)
等等。变量a
可以是任何类型(当然我们a
在定义之前知道类型someActions
)。实现这一目标的最佳方法是什么?另请提供工作示例。
解决方案
这种类型的链接对于可以应用于对象并返回相同类型的新对象的操作很有用。例如,我们可以在某种类型上定义一个运算平方并返回输入的平方(返回是关键,因为链依赖于返回值)。对于该模式的示例,请考虑具有平方和平方根的 float 的包装器。
class Chainable:
def __init__(self, val):
self.val = val
def square(self):
self.val *= self.val
return self #This is the key line here, by returning self we can make the chain
def squareRoot(self):
self.val = self.val**(1/2)
return self
请注意,现在我们可以执行 Chainable(4).square().squareRoot()..... 等等,因为返回类型将始终定义该操作。
注意:您不一定需要返回 self. 它只需要是相同的类型。如果它们具有交互操作,您还可以有一些可以相互工作的类型可以使用此模式。关键是返回结果的实例,因此您可以直接链接函数调用。
推荐阅读
- grails - Grails 中的 2 因素身份验证
- google-sheets - 如何获取另一个列表中每个条目的范围内最近的过去日期?
- vba - 使用VBA将所有段落转换为Word文档中的表格后如何重新缩进?
- php - MySQL 错误:SQLSTATE[HY000] [1045] 用户'test'@'localhost'的访问被拒绝(使用密码:YES)
- r - 如何查询具有给定范围内的值的矩阵元素的计数
- go - 加密消息的好方法是什么,它将等于来自 webhook 的 Uber 签名
- angular - Angular 上传文件失败
- angular - AOT 错误:ng build --prod 在 Angular 7 中给出错误
- android - 我的应用程序有效,但日志显示“没有找到 ID 0xffffffff 的包 ID ff”。
- prolog - 查找列表的较低峰