簡體   English   中英

Python方法/函數鏈

[英]Python method/function chaining

在python中,是否可以將類方法和函數鏈接在一起? 例如,如果我想實例化一個類對象並在其上調用一個影響實例變量狀態的方法,我可以這樣做嗎? 這是一個例子:

class Test(object):
    def __init__(self):
        self.x = 'Hello'

    @classmethod
    def make_upper(y):
        y.x = y.x.upper()

我想做的是這樣的:

h = Test().make_upper()

我想實例化一個類對象並在一行代碼中影響變量的狀態,但是我也希望能夠將可能影響狀態或對該對象執行其他操作的多個函數鏈接在一起。 像在jQuery中一樣,這在python中可能嗎?

是的,當然。 只需從您感興趣的實例方法中返回self

class Test(object):
    def __init__(self):
        self.x = 'Hello'

    def make_upper(self):
        self.x = self.x.upper()
        return self
    def make_lower(self):
        self.x = self.x.lower()
        return self

h = Test().make_upper()
print(h.x)

輸出:

HELLO

是的,沒有。 鏈接當然可以,但是hmake_upper()的返回值,而不是Test()返回的對象。 您需要將此寫為兩行。

h = Test()
h.make_upper()

但是PEP-572最近被接受包含在Python 3.8中,這意味着有一天您可以編寫

(h := Test()).make_upper()

Test()的返回值在當前作用域中分配給h用作:=表達式的值,然后調用其make_upper方法。 我不確定在這種情況下我是否建議使用:= 當前所需的語法更具可讀性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM