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使用百度翻译进行中翻英示例
Apr 14 Python
python下载文件记录黑名单的实现代码
Oct 24 Python
分享一个简单的python读写文件脚本
Nov 25 Python
Python3实现转换Image图片格式
Jun 21 Python
Python 监测文件是否更新的方法
Jun 10 Python
python 将字符串完成特定的向右移动方法
Jun 11 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
keras在构建LSTM模型时对变长序列的处理操作
Jun 29 Python
Django REST 异常处理详解
Jul 15 Python
python Polars库的使用简介
Apr 21 Python
教你使用Python pypinyin库实现汉字转拼音
May 27 Python
Python连接Postgres/Mysql/Mongo数据库基本操作大全
Jun 29 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 strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
2016/05/22 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
在线编辑器中换行与内容自动提取
2009/04/24 Javascript
JavaScript中的比较操作符&gt;、=、
2014/12/31 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
DeviceOne 让你一见钟情的App快速开发平台
2016/02/17 Javascript
javascript对象的创建和访问
2016/03/08 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
Vuejs实现带样式的单文件组件新方法
2017/05/02 Javascript
web前端vue实现插值文本和输出原始html
2018/01/19 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
vue之封装多个组件调用同一接口的案例
2020/08/11 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
Django实战之用户认证(初始配置)
2018/07/16 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
python 将列表里的字典元素合并为一个字典实例
2020/09/01 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
python 制作磁力搜索工具
2021/03/04 Python
加拿大女装网上购物:Reitmans
2016/10/20 全球购物
俄罗斯建筑和装饰材料在线商店:Stroilandia
2020/07/25 全球购物
体育教育专业自荐信范文
2013/12/20 职场文书
上课打牌的检讨书
2014/02/15 职场文书
竞选大队长演讲稿
2014/04/29 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
2014党的群众路线教育实践活动总结材料
2014/10/31 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
2016年教师党员创先争优承诺书
2016/03/24 职场文书
2019年大学生暑期社会实践调查报告模板
2019/11/07 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript