Python中return self的用法詳解
在Python中,有些開(kāi)源項(xiàng)目中的方法返回結(jié)果為self. 對(duì)于不熟悉這種用法的讀者來(lái)說(shuō),這無(wú)疑使人困擾,本文的目的就是給出這種語(yǔ)法的一個(gè)解釋?zhuān)⑶医o出幾個(gè)例子。
在Python中,return self的作用為:(英語(yǔ)原文,筆者水平有限,暫不翻譯)
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.
通俗的說(shuō)法是, allow chaining(這個(gè)是筆者自己的翻譯: 鏈?zhǔn)秸{(diào)用).
例子:
class Foo(object): def __init__(self): self.myattr = 0 def bar(self): self.myattr += 1 return self f = Foo() f.bar().bar().bar() print(f.myattr)
輸出結(jié)果為4.
把bar()方法改為返回return None, 則上述代碼會(huì)出錯(cuò)。
class Foo(object): def __init__(self): self.myattr = 0 def bar(self): self.myattr += 1 return None f = Foo() f.bar().bar().bar() print(f.myattr)
輸出結(jié)果如下:
AttributeError: 'NoneType' object has no attribute 'bar'
那么return self返回的結(jié)果是什么呢?
class Foo(object): def __init__(self): self.myattr = 0 def bar(self): self.myattr += 1 #return None return self f = Foo() print(type(f.bar()))
輸出結(jié)果為:
<class '__main__.Foo'>
可以發(fā)現(xiàn),return self返回的是類(lèi)的實(shí)例。
一個(gè)真實(shí)的例子:
sklearn模塊中很多方法的返回結(jié)果為self, 比如大多數(shù)模型的fit()方法,例子如下:
from sklearn.linear_model import LogisticRegression
X = [[0,0], [0,1], [1,0], [1,1]]
y = [0, 1, 1, 0]
clf = LogisticRegression()
# fit函數(shù)返回的結(jié)果就是self, 允許鏈?zhǔn)秸{(diào)用
t = clf.fit(X,y).predict([[0,2]])
print(t)
輸出:
[0]
總結(jié)
以上所述是小編給大家介紹的Python中return self的用法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
PyTorch中Tensor的數(shù)據(jù)統(tǒng)計(jì)示例
今天小編就為大家分享一篇PyTorch中Tensor的數(shù)據(jù)統(tǒng)計(jì)示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
基于Python實(shí)現(xiàn)二維圖像雙線性插值
雙線性插值,又稱(chēng)為雙線性?xún)?nèi)插。在數(shù)學(xué)上,雙線性插值是有兩個(gè)變量的插值函數(shù)的線性插值擴(kuò)展,其核心思想是在兩個(gè)方向分別進(jìn)行一次線性插值。本文將用Python實(shí)現(xiàn)二維圖像雙線性插值,感興趣的可以了解下2022-06-06
詳解python實(shí)現(xiàn)線程安全的單例模式
這篇文章主要介紹了python實(shí)現(xiàn)線程安全的單例模式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
Python生成可執(zhí)行文件之PyInstaller庫(kù)的使用方式
PyInstaller是一個(gè)十分有用的第三方庫(kù),通過(guò)對(duì)源文件打包,Python程序可以在沒(méi)有安裝Python的環(huán)境中運(yùn)行,也可以作為一個(gè)獨(dú)立文件方便傳遞和管理,下面這篇文章主要給大家介紹了關(guān)于Python生成可執(zhí)行文件之PyInstaller庫(kù)的使用方式,需要的朋友可以參考下2022-04-04
python 寫(xiě)一個(gè)文件分發(fā)小程序
這篇文章主要介紹了python 寫(xiě)一個(gè)文件分發(fā)小程序,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-12-12
對(duì)numpy下的軸交換transpose和swapaxes的示例解讀
今天小編就為大家分享一篇對(duì)numpy下的軸交換transpose和swapaxes的示例解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
Object arrays cannot be loaded when
這篇文章主要介紹了Object arrays cannot be loaded when allow_pickle=False,本文給大家分享問(wèn)題解決思路,需要的朋友可以參考下2022-11-11
Python實(shí)現(xiàn)GUI學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)GUI學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01

