在Python中,有些開源項目中的方法返回結果為self. 對于不熟悉這種用法的讀者來說,這無疑使人困擾,本文的目的就是給出這種語法的一個解釋,并且給出幾個例子。
在Python中,return self的作用為:(英語原文,筆者水平有限,暫不翻譯)
Returning self from a method simply means that your method returns a reference to the instance object on which it was called. This can sometimes be seen in use with object oriented APIs that are designed as a fluent interface that encourages method cascading.
通俗的說法是, allow chaining(這個是筆者自己的翻譯: 鏈式調用).
例子:
class Foo(object): def __init__(self): self.myattr = 0 def bar(self): self.myattr += 1 return selff = Foo()f.bar().bar().bar()print(f.myattr)
輸出結果為4.
把bar()方法改為返回return None, 則上述代碼會出錯。
class Foo(object): def __init__(self): self.myattr = 0 def bar(self): self.myattr += 1 return Nonef = Foo()f.bar().bar().bar()print(f.myattr)
輸出結果如下:
AttributeError: 'NoneType' object has no attribute 'bar'
那么return self返回的結果是什么呢?
class Foo(object): def __init__(self): self.myattr = 0 def bar(self): self.myattr += 1 #return None return selff = Foo()print(type(f.bar()))
輸出結果為:
<class '__main__.Foo'>
可以發現,return self返回的是類的實例。
一個真實的例子:
sklearn模塊中很多方法的返回結果為self, 比如大多數模型的fit()方法,例子如下:
from sklearn.linear_model import LogisticRegressionX = [[0,0], [0,1], [1,0], [1,1]]y = [0, 1, 1, 0]clf = LogisticRegression()# fit函數返回的結果就是self, 允許鏈式調用t = clf.fit(X,y).predict([[0,2]])print(t)
輸出:
[0]
總結
以上所述是小編給大家介紹的Python中return self的用法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林站長站網站的支持!
新聞熱點
疑難解答