Python中return self的用法详解
作者:jclian91 发布时间:2022-06-08 08:43:32
在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的用法网站的支持!
来源:https://segmentfault.com/a/1190000015791934


猜你喜欢
- 前言本文主要给大家介绍了关于Golang实现字符串倒序的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:字符串倒置如
- 本文实例讲述了Python使用MD5加密算法对字符串进行加密操作。分享给大家供大家参考,具体如下:# encoding: utf-8from
- 前言很多开发同学对SQL优化如数家珍,却对MySQL架构一知半解。岂不是只见树叶,不见森林,终将陷入细节中不能自拔。今天就一块学习MySQL
- Javascript 正常取来源网页的URL只要用: document.referrer就可以了!但,如果来源页是Jav
- flatten是numpy.ndarray.flatten的一个函数,其官方文档是这样描述的:ndarray.flatten(order=&
- 一、javascript是面向对象的编程语言封装:把相关的信息(无论数据或方法)存储在对象中的能力聚集:把一个对象存储在另一个对象内的能力继
- GetRepeatTimes(TheChar,TheString) 得到一个字符串在另一个字符串当中出现几次的函数(新)如:response
- 本文实例讲述了Django自定义过滤器定义与用法。分享给大家供大家参考,具体如下:一、自定义过滤器的介绍前面我们就介绍过过滤器其实就是一个函
- 业务需求我们需要一个微信小程序码,但是是需要提供给别人扫码的但是只有一个纯粹的小程序码是不好看的,所以需要推广的海报图片。再结合文字最终效果
- 1 简介Golang 是一门优秀的语言,特别是在并发编程上,得益于它的协程和 channel 等,非常方便易用。它通过 go module
- 前言:在fastapi中,我们定义的查询参数是可以设置成:必选参数 or 可选参数。可选查询参数只要给查询参数的默认值设置为None,表示该
- 目录事件类型事件处理方法处理键盘事件处理鼠标事件事件(Event)是 Pygame 的重要模块之一,它是构建整个游戏程序的核心,比如鼠标点击
- 1.先找到迁移服务器上的Data文件,我安装的是mysql5.7,默认安装的路径。那么就是在C:\ProgramData\MySQL文件里面
- 1、下载python安装包,进入python官网(python.org)2、安装python,可根据需求选择默认安装或自定义安装,如下3、选
- 用v-model绑定单选框能带来很多便捷的开发体验。基础用法<template> <div id="app&qu
- 有一个表,用户需要在后台操作它,希望能对它动态进行添加删除字段。这个功能也许没有问题,但是它原有插入与更新的两个存储过程,也需要一起修改。因
- 创建Vue项目 以及引入Iview官方文档# 全局安装 vue-cli$ npm install --global vue-cli# 创建一
- 今天在做编程题的时候发现Python的print输出默认换行输出,并且输出后有空格。题目要求输出122而我的输出是:122于是我百度查到取消
- 以这两个域名为例:http://www.knowsky.com/http://code.knowsky.com/这两个域名都是绑在同一个空间
- 上一篇文章,写了基本框架,可能很多人会觉得晕头转向,这里提供一个简单的例子来予以说明,希望能帮你解开谜团。一、功能介绍通过微信公众平台实现在