10

我有一个类和它的一些方法。我可以在调用之间保留方法的结果吗?

调用示例:

结果 = my_obj.method_1(...).method_2(...).method_3(...)

method_v3(...)收到来自method_2(..)谁的结果时method 1(..)

请告诉我,是否有模式或任何东西可以决定上面的例子?

4

2 回答 2

13

有一种非常简单的模式,称为Builder Patternwhere 方法基本上返回对当前对象的引用,因此不是将方法调用相互链接,而是链接在对象引用上。

Gang of Four 书中描述的实际 Builder 模式有点冗长(为什么要创建一个 builder 对象),而只是self从每个返回一个引用以setXXX()进行干净的方法链接。

在 Python 中可能看起来像这样:

class Person: 
   def setName(self, name):
      self.name = name
      return self   ## this is what makes this work

   def setAge(self, age):
      self.age = age;
      return self;

   def setSSN(self, ssn):
      self.ssn = ssn
      return self

你可以像这样创建一个人:

p = Person()
p.setName("Hunter")
 .setAge(24)
 .setSSN("111-22-3333")

请记住,您实际上必须将方法链接起来,p.a().b().c()因为 Python 不会忽略空格。

正如@MaciejGol 在评论中指出的那样,您可以p像这样分配给带有空格的链接:

p = (
   Person().setName('Hunter')
           .setAge(24)
           .setSSN('111-22-3333')
)

这是否是 Python 的最佳风格/想法我不能说,但这就是它在 Java 中的样子。

于 2013-06-26T13:22:00.027 回答
0

有多种选择完全取决于您的完整场景 -

  1. 责任链 - 如果您的不同类需要遵循一系列操作。
  2. Decorator - 当你不知道你需要哪个序列来为你的类对象添加额外的特性时
  3. Builder - 这将帮助您将参数值分配给您的类。
于 2013-06-26T13:39:31.420 回答