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编写生成验证码的脚本的教程
May 04 Python
通过python+selenium3实现浏览器刷简书文章阅读量
Dec 26 Python
Python3单行定义多个变量或赋值方法
Jul 12 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
Apr 11 Python
Python对象转换为json的方法步骤
Apr 25 Python
Python hexstring-list-str之间的转换方法
Jun 12 Python
QML使用Python的函数过程解析
Sep 26 Python
PyTorch中topk函数的用法详解
Jan 02 Python
Python如何读写字节数据
Aug 05 Python
基于python实现图片转字符画代码实例
Sep 04 Python
Django model class Meta原理解析
Nov 14 Python
python异步的ASGI与Fast Api实现
Jul 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调用Java对象的方法
2006/10/09 PHP
PHP生成静态页
2006/11/25 PHP
header跳转和include包含问题详解
2012/09/08 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
php使用PDO获取结果集的方法
2017/02/16 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
14款NodeJS Web框架推荐
2014/07/11 NodeJs
jQuery中siblings()方法用法实例
2015/01/08 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
bootstrap网页框架的使用方法
2016/05/10 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
vue interceptor 使用教程实例详解
2018/09/13 Javascript
Vue实现手机计算器
2020/08/17 Javascript
我所理解的JavaScript中的this指向
2020/09/04 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
Python3中多线程编程的队列运作示例
2015/04/16 Python
python从入门到精通(DAY 2)
2015/12/20 Python
利用Python抓取行政区划码的方法
2016/11/28 Python
学习Python selenium自动化网页抓取器
2018/01/20 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
Python While循环语句实例演示及原理解析
2020/01/03 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
个人简历自我评价
2014/02/02 职场文书
小学英语教学反思案例
2014/02/04 职场文书
某某同志考察材料
2014/05/28 职场文书
应聘教师自荐书
2014/06/16 职场文书
井冈山红色之旅心得体会
2014/10/07 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书
pyqt5蒙版遮罩mask,setmask的使用
2021/06/11 Python