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 相关文章推荐
Python3遍历目录树实现方法
May 22 Python
python逆向入门教程
Jan 15 Python
python爬虫获取淘宝天猫商品详细参数
Jun 23 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
Feb 19 Python
Python list列表中删除多个重复元素操作示例
Feb 27 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
May 10 Python
使用python将多个excel文件合并到同一个文件的方法
Jul 09 Python
Python jieba库用法及实例解析
Nov 04 Python
Python3运算符常见用法分析
Feb 14 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
Python连接Mysql进行增删改查的示例代码
Aug 03 Python
AI:如何训练机器学习的模型
Apr 16 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获取搜索引擎关键字来源的函数(支持百度和谷歌等搜索引擎)
2012/10/03 PHP
请离开include_once和require_once
2013/07/18 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
PHP中number_format()函数的用法讲解
2019/04/08 PHP
Angular.js中$apply()和$digest()的深入理解
2016/10/13 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
2017/06/01 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
2017/12/20 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
vue子路由跳转实现tab选项卡
2019/07/24 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
[00:35]DOTA2上海特级锦标赛 MVP.Phx战队宣传片
2016/03/04 DOTA
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
Python 实现自动导入缺失的库
2019/10/29 Python
Python 中如何使用 virtualenv 管理虚拟环境
2021/01/21 Python
捷克时尚网上商店:OTTO
2018/03/15 全球购物
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
董事长岗位职责
2013/11/30 职场文书
期末考试动员演讲稿
2014/01/10 职场文书
职工趣味运动会方案
2014/02/10 职场文书
优秀毕业生求职信
2014/06/05 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
机械专业求职信范文
2014/07/15 职场文书
教师优秀党员事迹材料
2014/08/14 职场文书
春节随笔
2015/08/15 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers
Python基础之数据类型知识汇总
2021/05/18 Python
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python