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 zip文件 压缩
Dec 24 Python
python操作日期和时间的方法
Mar 11 Python
python用字典统计单词或汉字词个数示例
Apr 22 Python
python中os模块详解
Oct 14 Python
Python中序列的修改、散列与切片详解
Aug 27 Python
python实现读取excel写入mysql的小工具详解
Nov 20 Python
用Python一键搭建Http服务器的方法
Jun 01 Python
python web自制框架之接受url传递过来的参数实例
Dec 17 Python
详解Pandas之容易让人混淆的行选择和列选择
Jul 10 Python
Python学习笔记之lambda表达式用法详解
Aug 08 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
Dec 14 Python
Python 实现二叉查找树的示例代码
Dec 21 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+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
理解php Hash函数,增强密码安全
2011/02/25 PHP
几个有用的php字符串过滤,转换函数代码
2012/05/01 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
在图片上显示左右箭头类似翻页的代码
2013/03/04 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
angular中使用路由和$location切换视图
2015/01/23 Javascript
在AngularJS应用中实现一些动画效果的代码
2015/06/18 Javascript
javascript实现随机显示星星特效
2016/01/28 Javascript
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
使用classList来实现两个按钮样式的切换方法
2018/01/24 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
小程序server请求微信服务器超时的解决方法
2019/05/21 Javascript
解决Layui当中的导航条动态添加后渲染失败的问题
2019/09/25 Javascript
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
2020/04/01 jQuery
Python实现批量执行同目录下的py文件方法
2019/01/11 Python
将pycharm配置为matlab或者spyder的用法说明
2020/06/08 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
手把手教你实现一个canvas智绘画板的方法
2019/03/04 HTML / CSS
详解HTML5常用的语义化标签
2019/09/27 HTML / CSS
Kathmandu新西兰官网:新西兰户外运动品牌
2019/07/27 全球购物
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
材料成型专业个人求职信范文
2013/09/25 职场文书
物业保安员岗位职责
2014/03/14 职场文书
投标诚信承诺书
2014/05/26 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
优秀教师个人材料
2014/12/15 职场文书
总经理助理岗位职责
2015/01/31 职场文书
《比尾巴》教学反思
2016/02/24 职场文书
Pytorch中TensorBoard及torchsummary的使用详解
2021/05/12 Python