2022年2月12日 星期六

[Python] Fluent Interface 流式接口

 

不知道大家是否有聽過「流式接口」(Fluent Interface)

總之我是最近才知道這個詞的


說起來為什麼會去查這東西

因為最近隨便看看,看到Java code滿多這樣的程式碼:a.foo().boo(),像是這樣會將函式接連串下去的程式碼,就好奇查了一下Python相似的寫法實作與應用

然後就查到原來這樣的寫法有個稱呼:「流式接口」

流式接口- 維基百科,自由的百科全書 


維基百科裡上就有記載各種程式語言的實作,看了大概就能知道怎麼做了

使用流式接口寫法主要的好處是程式碼讀起來簡潔好懂得多


下面是Python範例:

class Msg:
    def __init__(self, msg):
        self.msg = msg
        self.receiver = ""
    
    def to(self, receiver):
        self.receiver = receiver
        return self

    def send(self):
        print(f"Send {self.msg} to {self.receiver}")
        return self

Msg("hello").to("Mary").send()


Msg("hello").to("Mary").send() 這段看起來真的整潔好懂

實作的關鍵就是return self,回傳物件自己本身

之後有機會也寫多嘗試流式接口寫法


另外在這有讀到建議是回傳一個新的物件而非self,https://stackoverflow.com/questions/37827808/fluent-interface-with-python

用意是防止從別的變數改動到原物件



沒有留言:

張貼留言