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使用xmlrpc实例讲解
Dec 17 Python
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
Jun 09 Python
深入浅出学习python装饰器
Sep 29 Python
python回调函数中使用多线程的方法
Dec 25 Python
python基础教程项目四之新闻聚合
Apr 02 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 Python
浅析python参数的知识点
Dec 10 Python
Python any()函数的使用方法
Oct 28 Python
Django自带的加密算法及加密模块详解
Dec 03 Python
flask框架渲染Jinja模板与传入模板变量操作详解
Jan 25 Python
Python3爬虫关于识别检验滑动验证码的实例
Jul 30 Python
python opencv通过4坐标剪裁图片
Jun 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
PHP 程序员应该使用的10个组件
2009/10/31 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
js left,right,mid函数
2008/06/10 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
2013/12/10 Javascript
JavaScript脚本库编写的方法
2015/12/09 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
ES6 更易于继承的类语法的使用
2019/02/11 Javascript
简单了解Javscript中兄弟ifream的方法调用
2019/06/17 Javascript
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
Python中的枚举类型示例介绍
2019/01/09 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
python3将变量输入的简单实例
2020/08/19 Python
python装饰器三种装饰模式的简单分析
2020/09/04 Python
Python pymsql模块的使用
2020/09/07 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
css3 实现圆形旋转倒计时
2018/02/24 HTML / CSS
基于HTML5 Canvas的3D动态Chart图表的示例
2017/11/02 HTML / CSS
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
马智宇结婚主持词
2014/04/01 职场文书
趣味运动会策划方案
2014/06/02 职场文书
大学生个人学习总结
2015/02/15 职场文书
求职简历自我评价范文
2015/03/10 职场文书
2015年反腐倡廉工作总结
2015/05/14 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书
pytorch finetuning 自己的图片进行训练操作
2021/06/05 Python
Django框架中模型的用法
2022/06/10 Python