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性能优化的20条建议
Oct 25 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
Apr 20 Python
使用Python判断质数(素数)的简单方法讲解
May 05 Python
浅谈python抛出异常、自定义异常, 传递异常
Jun 20 Python
全面了解python字符串和字典
Jul 07 Python
详谈python http长连接客户端
Jun 12 Python
Python实现查看系统启动项功能示例
May 10 Python
Python实现Restful API的例子
Aug 31 Python
python二元表达式用法
Dec 04 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
python中把元组转换为namedtuple方法
Dec 09 Python
基于Python和openCV实现图像的全景拼接详细步骤
Oct 05 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
zen cart新进商品的随机排序修改方法
2010/09/10 PHP
php可应用于面包屑导航的递归寻找家谱树实现方法
2015/02/02 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
actionscript与javascript的区别
2011/05/25 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
pycharm 使用心得(三)Hello world!
2014/06/05 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
python对象与json相互转换的方法
2019/05/07 Python
python文件写入write()的操作
2019/05/14 Python
浅谈python3中input输入的使用
2019/08/02 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
python实现淘宝购物系统
2019/10/25 Python
Python tkinter常用操作代码实例
2020/01/03 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
python和c语言哪个更适合初学者
2020/06/22 Python
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
简述Html5 IphoneX 适配方法
2018/02/08 HTML / CSS
网页设计个人找工作求职信
2013/11/28 职场文书
物流专业求职计划书
2014/01/10 职场文书
初三新学期计划书
2014/05/03 职场文书
诚信考试标语
2014/06/24 职场文书
工伤调解协议书
2016/03/21 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
Redis基本数据类型List常用操作命令
2022/06/01 Redis