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 29 Python
Python中用Spark模块的使用教程
Apr 13 Python
python多线程socket编程之多客户端接入
Sep 12 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
Apr 23 Python
Python实现求解括号匹配问题的方法
Apr 17 Python
浅谈numpy数组中冒号和负号的含义
Apr 18 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
Jun 18 Python
Python如何使用函数做字典的值
Nov 30 Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
Sep 22 Python
python 常用日期处理-- datetime 模块的使用
Sep 02 Python
Python 如何实现文件自动去重
Jun 02 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
基于文本的访客签到簿
2006/10/09 PHP
php中取得URL的根域名的代码
2011/03/23 PHP
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
php中file_get_contents与curl性能比较分析
2014/11/08 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
2019/05/25 PHP
js实现的复制兼容chrome和IE
2014/04/03 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
2015/10/28 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
Node.js中的child_process模块详解
2018/06/08 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
jquery实现轮播图特效
2020/04/12 jQuery
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
Python中使用dom模块生成XML文件示例
2015/04/05 Python
Python中类型检查的详细介绍
2017/02/13 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
美国知名艺术画网站:Art.com
2017/02/09 全球购物
关联、聚合(Aggregation)以及组合(Composition)的区别
2012/02/29 面试题
自我鉴定模板
2013/10/29 职场文书
课程设计心得体会
2013/12/28 职场文书
先进工作者获奖感言
2014/02/08 职场文书
2014年健康教育实施方案
2014/02/17 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
城管个人总结
2015/02/28 职场文书
销售辞职信范文
2015/03/02 职场文书
2015年七一建党节活动总结
2015/03/20 职场文书
2015年高中班主任工作总结
2015/04/30 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python
python munch库的使用解析
2021/05/25 Python
python中的getter与setter你了解吗
2022/03/24 Python