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 相关文章推荐
Python读取mp3中ID3信息的方法
Mar 05 Python
解决Python pandas df 写入excel 出现的问题
Jul 04 Python
python调用自定义函数的实例操作
Jun 26 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
Python面向对象之继承原理与用法案例分析
Dec 31 Python
Python打开文件、文件读写操作、with方式、文件常用函数实例分析
Jan 07 Python
PyTorch中Tensor的数据统计示例
Feb 17 Python
python json load json 数据后出现乱序的解决方案
Feb 27 Python
Python tkinter界面实现历史天气查询的示例代码
Aug 23 Python
利用Python优雅的登录校园网
Oct 21 Python
解决pytorch 模型复制的一些问题
Mar 03 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 04 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
PHP一些常用的正则表达式字符的一些转换
2008/07/29 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
php接口技术实例详解
2016/12/07 PHP
php框架CodeIgniter主从数据库配置方法分析
2018/05/25 PHP
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
js 创建快捷方式的代码(fso)
2010/11/19 Javascript
用javascript判断IE版本号简单实用且向后兼容
2013/09/11 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
jQuery随机密码生成的方法
2015/03/09 Javascript
jQuery获取上传文件的名称的正则表达式
2015/05/21 Javascript
使用Chrome浏览器调试AngularJS应用的方法
2015/06/18 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
JS中setTimeout的巧妙用法前端函数节流
2016/03/24 Javascript
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
qrcode生成二维码微信长按无法识别问题的解决
2019/04/04 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
js实现单元格拖拽效果
2020/02/10 Javascript
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
python查看微信好友是否删除自己
2016/12/19 Python
Django中Model的使用方法教程
2018/03/07 Python
django manage.py扩展自定义命令方法
2018/05/27 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
python中的句柄操作的方法示例
2019/06/20 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
英国网上电器商店:Electricshop
2020/03/15 全球购物
社会实践自我鉴定
2013/11/07 职场文书
《穷人》教学反思
2014/04/08 职场文书
大学生精神文明先进个人事迹材料
2014/05/02 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
2015婚礼主持词开场白
2015/05/28 职场文书
2016年法制宣传月活动总结
2016/04/01 职场文书
Golang解析JSON对象
2022/04/30 Golang