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 26 Python
详解Python的单元测试
Apr 28 Python
python基于phantomjs实现导入图片
May 13 Python
Python3之文件读写操作的实例讲解
Jan 23 Python
Python实现输出某区间范围内全部素数的方法
May 02 Python
python判断一个集合是否为另一个集合的子集方法
May 04 Python
Python实现绘制双柱状图并显示数值功能示例
Jun 23 Python
python读取txt文件并取其某一列数据的示例
Feb 19 Python
Python基础知识点 初识Python.md
May 14 Python
python json.dumps中文乱码问题解决
Apr 01 Python
PyCharm 在Windows的有用快捷键详解
Apr 07 Python
Python list和str互转的实现示例
Nov 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
咖啡知识大全
2021/03/03 新手入门
如何提高MYSQL数据库的查询统计速度 select 索引应用
2007/04/11 PHP
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
跟我学Laravel之路由
2014/10/15 PHP
php打乱数组二维数组多维数组的简单实例
2016/06/17 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
2016/10/18 PHP
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
编写js扩展方法判断一个数组中是否包含某个元素
2013/11/08 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
详解javascript中的事件处理
2015/11/06 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
2016/11/29 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
2017/10/11 Javascript
Vue+ElementUI实现表单动态渲染、可视化配置的方法
2018/03/07 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
微信小程序 组件的外部样式externalClasses使用详解
2019/09/06 Javascript
JS面向对象编程实现的Tab选项卡案例详解
2020/03/03 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
Python中使用strip()方法删除字符串中空格的教程
2015/05/20 Python
Django中如何使用sass的方法步骤
2019/07/09 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
浅析python内置模块collections
2019/11/15 Python
django rest framework使用django-filter用法
2020/07/15 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
通过代码简单了解django model序列化作用
2020/11/12 Python
18-35岁旅游团的全球领导者:Contiki
2017/02/08 全球购物
美国环保婴儿用品公司:The Honest Company
2017/11/23 全球购物
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
成人毕业生自我鉴定
2013/10/18 职场文书
美术师范毕业生自荐信
2013/11/16 职场文书
土建专业毕业生自荐书
2014/07/04 职场文书
售后客服个人自我评价
2014/09/14 职场文书