zoukankan      html  css  js  c++  java
  • 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]
    
  • 相关阅读:
    Ionic app 通知在Moto 360 Watch上显示通知(2)
    Ionic app 通知在Moto 360 Watch上显示通知(1)
    Ionic App ActionSheet布局问题
    Ionic 图片延时加载
    Ionic app 上传图片之webApi接口
    Ionic app升级插件开发
    Ionic 添加java原生代码 报support.v4不存在问题
    Ionic 中badge的应用
    Java 期末复习提纲
    win10 + VS2015 + EF6 + MySQL
  • 原文地址:https://www.cnblogs.com/jclian91/p/9377995.html
Copyright © 2011-2022 走看看