首页 > 解决方案 > 对变量执行一系列操作

问题描述

我需要执行我对变量定义的一系列操作。例如,我有变量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)。实现这一目标的最佳方法是什么?另请提供工作示例。

标签: pythonpython-3.xoopfunctional-programming

解决方案


这种类型的链接对于可以应用于对象并返回相同类型的新对象的操作很有用。例如,我们可以在某种类型上定义一个运算平方并返回输入的平方(返回是关键,因为链依赖于返回值)。对于该模式的示例,请考虑具有平方和平方根的 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. 它只需要是相同的类型。如果它们具有交互操作,您还可以有一些可以相互工作的类型可以使用此模式。关键是返回结果的实例,因此您可以直接链接函数调用。


推荐阅读