Python中return self的用法


  在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 self

f = Foo()
f.bar().bar().bar()
print(f.myattr)

輸出結果為3.

把bar()方法改為返回return None, 則上述代碼會出錯。

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)

輸出結果如下:

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 self

f = Foo()
print(type(f.bar()))

輸出結果為:

<class '__main__.Foo'>

可以發現,return self返回的是類的實例。

  一個真實的例子:

sklearn模塊中很多方法的返回結果為self, 比如大多數模型的fit()方法,例子如下:

from sklearn.linear_model import LogisticRegression

X = [[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]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM