我有一个班级和一些方法。我可以在调用之间保留方法的结果吗?
示例呼叫:
result = my_obj.method_1(...)。method_2(...)。method_3(...)
method_v3(...)
收到method_2(..)
收到method 1(..)
请告诉我,上面的例子中是否有模式或其他内容?
答案 0 :(得分:9)
有一个非常简单的模式称为Builder Pattern
,其中方法基本上返回对当前对象的引用,因此不是将方法调用链接在一起,而是将它们链接在对象引用上。
“Gang of Four”一书中描述的实际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中的样子。
答案 1 :(得分:0)
有多种选择完全取决于您的完整情景 -