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 相关文章推荐
在MAC上搭建python数据分析开发环境
Jan 26 Python
使用Python判断质数(素数)的简单方法讲解
May 05 Python
python下10个简单实例代码
Nov 15 Python
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
深入浅析Python中的yield关键字
Jan 24 Python
查看django版本的方法分享
May 14 Python
Python中创建二维数组
Oct 17 Python
python3实现名片管理系统
Nov 29 Python
Python文件读写常见用法总结
Feb 22 Python
Django通过dwebsocket实现websocket的例子
Nov 15 Python
python tornado使用流生成图片的例子
Nov 18 Python
一文读懂python Scrapy爬虫框架
Feb 24 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
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
PHP XML数据解析代码
2010/05/26 PHP
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
php依赖注入知识点详解
2019/09/23 PHP
深入理解JavaScript系列(4) 立即调用的函数表达式
2012/01/15 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
详解nodejs 文本操作模块-fs模块(一)
2016/12/22 NodeJs
详解Vue中添加过渡效果
2017/03/20 Javascript
node+vue实现用户注册和头像上传的实例代码
2017/07/20 Javascript
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
Python中删除文件的程序代码
2011/03/13 Python
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
python实现的简单文本类游戏实例
2015/04/28 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
2017/12/21 Python
Flask框架配置与调试操作示例
2018/07/23 Python
Python3 Tkinter选择路径功能的实现方法
2019/06/14 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
python MD5加密的示例
2020/10/19 Python
adidas官方旗舰店:德国运动用品制造商
2017/11/25 全球购物
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
2014年小学元旦活动方案
2014/02/12 职场文书
感恩节活动策划方案
2014/05/16 职场文书
项目经理任命书内容
2014/06/06 职场文书
给老婆的保证书
2015/01/16 职场文书
《失物招领》教学反思
2016/02/20 职场文书
高二化学教学反思
2016/02/22 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python
html5实现点击弹出图片功能
2021/07/16 HTML / CSS