Python中return self的用法详解


Posted in Python onJuly 27, 2018

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

输出结果为4.

把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]

总结

以上所述是小编给大家介绍的Python中return self的用法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
开始着手第一个Django项目
Jul 15 Python
python如何实现反向迭代
Mar 20 Python
Tensorflow中使用tfrecord方式读取数据的方法
Jun 19 Python
python操作小程序云数据库实现简单的增删改查功能
Jun 06 Python
python基于celery实现异步任务周期任务定时任务
Dec 30 Python
Python列表切片常用操作实例解析
Mar 10 Python
Python自定义聚合函数merge与transform区别详解
May 26 Python
pycharm2020.2 配置使用的方法详解
Sep 16 Python
Python通过字典映射函数实现switch
Nov 06 Python
python使用XPath解析数据爬取起点小说网数据
Apr 22 Python
Python if else条件语句形式详解
Mar 24 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
Apr 24 Python
TensorFlow打印tensor值的实现方法
Jul 27 #Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 #Python
Tensorflow 同时载入多个模型的实例讲解
Jul 27 #Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 #Python
Python解决走迷宫问题算法示例
Jul 27 #Python
python保存文件方法小结
Jul 27 #Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
Jul 27 #Python
You might like
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
2016/02/23 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
用dom+xhtml+css制作的一个相册效果代码打包下载
2008/01/24 Javascript
javascript dom 操作详解 js加强
2009/07/13 Javascript
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
jquery中:input和input的区别分析
2011/07/13 Javascript
js之onload事件的一点使用心得
2013/08/14 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
2014/12/13 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
微信小程序实现蒙版弹出窗功能
2019/09/17 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
Nodejs封装类似express框架的路由实例详解
2020/01/05 NodeJs
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
vue 导出文件,携带请求头token操作
2020/09/10 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
在Python的Django框架中用流响应生成CSV文件的教程
2015/05/02 Python
Python程序暂停的正常处理方法
2019/11/07 Python
Python中pyecharts安装及安装失败的解决方法
2020/02/18 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
使用Nibabel库对nii格式图像的读写操作
2020/07/01 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
python制作抽奖程序代码详解
2021/01/15 Python
css3实现椭圆轨迹旋转的示例代码
2018/10/29 HTML / CSS
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
马来西亚最热门的在线时尚商店:FashionValet
2018/11/11 全球购物
德国网上超市:myTime.de
2019/08/26 全球购物
如何撰写岗位职责
2014/02/01 职场文书
热门专业求职信
2014/05/24 职场文书
2015年元旦标语大全
2014/12/09 职场文书
聘用合同范本
2015/09/21 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
JS Canvas接口和动画效果大全
2021/04/29 Javascript