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 相关文章推荐
easy_install python包安装管理工具介绍
Feb 10 Python
Python 命令行非阻塞输入的小例子
Sep 27 Python
python正则表达式及使用正则表达式的例子
Jan 22 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
Python简单计算文件MD5值的方法示例
Apr 11 Python
Python多进程写入同一文件的方法
Jan 14 Python
Python3利用print输出带颜色的彩色字体示例代码
Apr 08 Python
在python中用print()输出多个格式化参数的方法
Jul 16 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
pycharm如何设置官方中文(如何汉化)
Dec 29 Python
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
May 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
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
php cookie的操作实现代码(登录)
2010/12/29 PHP
php中file_get_contents与curl性能比较分析
2014/11/08 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
laravel 5.5 关闭token的3种实现方式
2019/10/24 PHP
PHP如何获取Cookie并实现模拟登录
2020/07/16 PHP
使用JavaScript switch case 另类写法
2010/03/14 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
Javascript中this关键字的一些小知识
2015/03/15 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
删除table表格行的实例讲解
2017/09/21 Javascript
Vue服务器渲染Nuxt学习笔记
2018/01/31 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
js canvas实现俄罗斯方块
2020/10/11 Javascript
Python中使用asyncio 封装文件读写
2016/09/11 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
解决pycharm安装后代码区不能编辑的问题
2018/10/28 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
Django缓存系统实现过程解析
2019/08/02 Python
余弦相似性计算及python代码实现过程解析
2019/09/18 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
2020/02/23 Python
python 根据列表批量下载网易云音乐的免费音乐
2020/12/03 Python
个人找工作自荐信格式
2013/09/21 职场文书
大三学生做职业规划:给未来找个方向
2014/02/24 职场文书
弘扬雷锋精神演讲稿
2014/05/10 职场文书
本科生导师推荐信范文
2014/05/18 职场文书
学校志愿者活动总结
2014/06/27 职场文书
新郎答谢词
2015/01/04 职场文书
2015初中团委工作总结
2015/07/28 职场文书