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 相关文章推荐
pyside写ui界面入门示例
Jan 22 Python
简介Python设计模式中的代理模式与模板方法模式编程
Feb 02 Python
浅谈python为什么不需要三目运算符和switch
Jun 17 Python
使用Python绘制图表大全总结
Feb 11 Python
Python脚本按照当前日期创建多级目录
Mar 01 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
django之使用celery-把耗时程序放到celery里面执行的方法
Jul 12 Python
pytorch打印网络结构的实例
Aug 19 Python
在python中利用pycharm自定义代码块教程(三步搞定)
Apr 15 Python
cookies应对python反爬虫知识点详解
Nov 25 Python
Python 爬取淘宝商品信息栏目的实现
Feb 06 Python
基于PyTorch中view的用法说明
Mar 03 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去掉从word直接粘贴过来的没有用格式的函数
2012/10/29 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
php数据序列化测试实例详解
2017/08/12 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
JS实现横向与竖向两个选项卡Tab联动的方法
2015/09/27 Javascript
jquery ztree异步搜索(搜叶子)实践
2016/02/25 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
详解AngularJs中$resource和restfu服务端数据交互
2016/09/21 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
vue 实现剪裁图片并上传服务器功能
2018/03/01 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
Webstorm2016使用技巧(SVN插件使用)
2018/10/29 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
Python any()函数的使用方法
2019/10/28 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
CSS3提交意见输入框样式代码
2014/10/30 HTML / CSS
美津浓美国官网:Mizuno美国
2018/08/07 全球购物
学习心得体会
2014/01/01 职场文书
四年级评语大全
2014/04/21 职场文书
好媳妇事迹材料
2014/12/24 职场文书
小学生优秀评语
2014/12/29 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
请假条应该怎么写?
2019/06/24 职场文书
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python
Mysql排序的特性详情
2021/11/01 MySQL