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遍历文件夹并删除特定格式文件的示例
Mar 05 Python
Python md5与sha1加密算法用法分析
Jul 14 Python
python中利用await关键字如何等待Future对象完成详解
Sep 07 Python
Python 机器学习库 NumPy入门教程
Apr 19 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
May 25 Python
详解Python中pandas的安装操作说明(傻瓜版)
Apr 08 Python
Python 存储字符串时节省空间的方法
Apr 23 Python
python3.5安装python3-tk详解
Apr 26 Python
Python类中方法getitem和getattr详解
Aug 30 Python
Python3 利用face_recognition实现人脸识别的方法
Mar 13 Python
python制作微博图片爬取工具
Jan 16 Python
python 提取html文本的方法
May 20 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面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
详解php中反射的应用
2016/03/15 PHP
php is_executable判断给定文件名是否可执行实例
2016/09/26 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
2017/03/13 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
10个新的最有前途的JavaScript框架
2009/03/12 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
jquery常用操作小结
2014/07/21 Javascript
javascript数组排序汇总
2015/07/07 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
js判断文本框输入的内容是否为数字
2015/12/23 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
2017/01/21 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
js中url对象化管理分析
2017/12/29 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
python协程用法实例分析
2015/06/04 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
解决Python3 被PHP程序调用执行返回乱码的问题
2019/02/16 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
Python在Matplotlib图中显示中文字体的操作方法
2019/07/29 Python
python实现的接收邮件功能示例【基于网易POP3服务器】
2019/09/11 Python
html5 Canvas绘制线条 closePath()实例代码
2012/05/10 HTML / CSS
法国房车租赁网站:Yescapa
2019/08/26 全球购物
建设投标担保书
2014/05/13 职场文书
会计专业求职信
2014/08/10 职场文书
见习报告怎么写
2014/10/31 职场文书
2014年内勤工作总结
2014/11/24 职场文书
团代会邀请函
2015/02/02 职场文书
创业计划书之花店
2019/09/20 职场文书