Python中Self的详解及使用

news2024/9/23 17:17:35

        大家学Python面向对象的时候,总会遇到一个让人难以理解的存在:self

        这个self到底是谁啊,为什么每个类实例方法都有一个参数self,它到底有什么作用呢?

「先下结论:类实例化后,self即代表着实例(对象)本身」

        想要理解self有个最简单的方法,就是你把self当做「实例(对象)身份证。」

        Python的类不能直接使用,只有通过创建实例(对象)才能发挥它的功能,每个实例(对象)都是独一无二的,它可以调用类的方法、属性。类就像灵魂附体一样,让实例(对象)有了自己(self)的功能。

        初学者会发现,类的方法(构造方法和实例方法)中都会有一个固定参数self,其实这个参数就是代表着实例(对象)本身,就像是一个身份证,实例可以凭着身份证去调用类方法。

        类比人类,人类就是一个Python类,每个个体的人代表着实例(对象),而每个人的身份证代表的Python中self,每个人可以凭借身份证去上大学、坐高铁、住酒店...(方法),而Python中的实例(对象)也可以凭着self去调用类的方法。

        上面是用类比的方法解释了下self的含义,说到底self就是代表着实例本身,「当某个实例(对象)调用类方法时,该对象会把自身的引用作为第一个参数自动传给该方法,而这第一个参数就是self。」

        而且self只是约定俗成的写法,你可以用任何其他名称代替self,不会改变代码含义,只不过我们一般不这样做。

        为了更好的说明self的作用,我们来举个例子,下面有一个Students类:

class Students:
    # 构造方法
    def __init__(self,name):
        self.name = name

    # 实例方法
    def study(self,examination_results):
        self.examination_results = examination_results
        print("同学{}的考试分数是{}".format(self.name,self.examination_results))
        print("该实例对象的地址是{}".format(self))

        先来个实例student_a

studend_a = Students('studend_a')
print(studend_a.name)

结果打印出:studend_a

          再来个实例student_b

studend_b = Students('studend_b')
print(studend_b.name)

结果打印出:studend_b

        可以看出,实例(对象)不一样,打印出的结果也不一样,当类被实例化后,self.name其实就等于实例(对象).name

        还是以刚刚的代码为例,我们再来调用里面的实例方法,里面会打印出self,就能看得更加明显了

        实例student_a:

studend_a = Students('studend_a')
print(studend_a.study(80))

        输出结果:

同学studend_a的考试分数是80 该实例对象的地址是<「main」.Students object at 0x00000129EB0F6A90>

        实例student_b:

studend_b = Students('studend_b')
print(studend_b.study(80))

        输出结果:

同学studend_b的考试分数是80 该实例对象的地址是<「main」.Students object at 0x00000129EB0F6B38>

        大家能清楚看到两个实例打印出的self是不一样的,因为self代表着实例(对象)本身。

以实例student_b来说,打印self出现下面对象信息

<__main__.Students object at 0x00000129EB0F6B38>

        如果再打印 student_b,会出现同样的结果

print(student_b)

输出:

<__main__.Students object at 0x00000129EB0F6B00>

这个时候是不是就清楚了,类实例化后,self即代表着实例(对象)本身

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/713512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[SSM]在WEB中应用MyBtis

目录 MyBatis基础 5.1需求描述 5.2数据库表的设计和准备数据 5.3实现步骤 第一步&#xff1a;引入相关依赖 第二步&#xff1a;引入相关配置文件&#xff0c;放到resources目录下&#xff08;全部放到类的根路径下&#xff09; 第三步&#xff1a;前端页面index.html 第…

Istio 深入理解数据平面组件 Envoy

ingress control承载了控制面和数据面的一个职责&#xff0c;在control里面有一个process&#xff0c;这个进程就承担了反向代理的能力&#xff0c;当有任何请求发过来的时候&#xff0c;会被nginx接收到这个请求并且被转发&#xff0c;基于的规则由ingress control动态配置的&…

2023年7月1日【青书学堂】考试 计算机应用基础(高起专)

2023年7月1日【青书学堂】考试 计算机应用基础(高起专) 注意:答案仅供参考 成绩:88.8 分 第1题 单选题 在Word的编辑状态,按先后顺序依次打开了d1.doC、d2.doC、d3.doC、d4.doc 4个文档,当前的活动窗口的文档名为____。 A:d1.doc B:d2.doc C:d4.doc D:d3.doc 答案:C 第…

php代码还原工具,解决goto语句混淆,php goto解密还原

在编写php代码时&#xff0c;使用goto语句是一种常见的加密技巧。为了解决goto解码无法阅读这个问题&#xff0c;今天我要向大家介绍一款强大的php goto解密工具。 这款工具的主要功能之一就是php代码的还原。通过对代码进行解析和分析&#xff0c;它能够轻松还原被混淆的goto…

vim多文件切换快捷键设置

1、基本切换指令 vim中在打开多个文件时&#xff0c;会有多个文件进行切换的需求。按:bn切换到下一个文件&#xff0c;按:bp切换到上一个文件。 2、快捷键设置 为了便捷操作&#xff0c;将切换命令设置成快捷键。 进入/home/yys个人目录下&#xff0c;vim .vimrc进入vimrc文…

Spring Boot 中的 @EnableDiscoveryClient 注解

Spring Boot 中的 EnableDiscoveryClient 注解 Spring Boot 是一个快速开发 Spring 应用程序的框架&#xff0c;它提供了一些基础设施&#xff0c;使得我们可以快速地开发出高效、可靠的应用程序。其中&#xff0c;EnableDiscoveryClient 注解是 Spring Boot 中一个非常重要的…

C++刷题第四天 链表 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 160. 链表相交 ● 142.环形链表II

24. 两两交换链表中的节点 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例&#xff1a; 原列表为&#xff1a;1-2-3-4-…

【Mysql】Explain深入分析(三)

Explain工具介绍 使用EXPLAIN关键字可以模拟优化器执行SQL语句&#xff0c;分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字&#xff0c;MySQL 会在查询上设置一个标记&#xff0c;执行查询会返回执行计划的信息&#xff0c;而不是执行这条SQL 注意…

node ffmpeg jsmpeg 拉流 展示笔记

拉流参考上一篇 基础&#xff1a;FFmpeg安装过 拉流完成之后转换成可播放的方式 1、下载jsmpeghttps://github.com/phoboslab/jsmpeg 下载完 用vscode 打开jsmpeg-master目录 2、在根目录下安装 node-media-server npm install node-media-server 新建app.js并运行 const…

8 图像去噪 滤波 锐化 边缘检测案例(matlab程序)

1.简述 学习目标&#xff1a;一个图像处理的经典综合案例 一、图像锐化的原理   图像锐化的目的是凸显物体的细节轮廓&#xff0c;通常可以用梯度、Laplace算子和高通滤波来实现&#xff0c;下面一一说明&#xff1a; 1、梯度法 梯度计算可以参考 小白学习图像处理——cann…

数据可视化01_t-SNE

1. t-SNE的定义 t-SNE stands for t-distributed Stochastic Neighbor Embedding. 代表 t 分布随机邻域嵌入。 t-SNE 获取高维数据并将其降低到较低维空间&#xff0c;同时保持数据点之间的关系尽可能接近其原始排列。 它是一种无监督机器学习算法&#xff0c;由 Laurens va…

8年测试经验总结,性能测试流程与性能测试学习路线,卷起来...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试流程 1、…

运输层概述、端口号、复用与分用

1.运输层概述、端口号、复用与分用 笔记来源&#xff1a; 湖科大教书匠&#xff1a;运输层概述 湖科大教书匠&#xff1a;运输层端口号、复用与分用的概念 声明&#xff1a;该学习笔记来自湖科大教书匠&#xff0c;笔记仅做学习参考 1.1 运输层概述 计算机网络体系结构中的物…

交流220v转12v给单片机供电芯片

客户的应用需求&#xff1a;AD220V转DC12V 体积要非常小&#xff0c;单片机使用&#xff0c;单片机设备12V 电流很小不会超过100mA&#xff1f; 【AD220V转DC12V体积小的问题】 问题&#xff1a;我需要将交流电&#xff08;220V&#xff09;转换为直流电&#xff08;12V&…

fastadmin后台 点击开关 弹出 你没有权限访问 角色组里面添加了,除了超级管理员其他的只要用状态开关就,没权限 解决办法

首发地址&#xff1a;https://ask.fastadmin.net/question/22863.html 然后再对应的后台控制器里面 加入 protected $multiFields 你设计数据库的开关字段; //注意是字段&#xff0c;不是填写: multi 示例&#xff1a; protected $multiFields show_switch; 也可以多个 p…

QWebEngine应用(一)

前言 很早以前就听说过Qt也能显示网页&#xff0c;一直没有机会真正研究应用起来&#xff0c;刚好最近项目中使用到了QWebEngine内嵌浏览器打开第三方的网站&#xff0c;使用的Qt版本为5.15&#xff0c;踩了不少的坑&#xff0c;这里做个总结。 QWebEngine架构 Qt WebEngine…

亚马逊云科技连续12年被评为“领导者”,用实力赋能企业出海

从人类发展历史上看&#xff0c;无论是刳木为舟&#xff0c;剡木为楫&#xff0c;还是郑和下西洋&#xff0c;亦或是欧洲大航海时代&#xff0c;人类对于出海探索这件事就从未停止。而在如今的时代&#xff0c;相似的故事依旧在上演。过去的十年&#xff0c;是中国互联网最为繁…

多路码流RTSP传输并对每路视频图像叠加OSD信息

一、先保证多路视频码流保存到本地&#xff0c;并且分辨率正确 注意点&#xff1a; 1.VPSS分两路通道 2.VENC分两路通道 if(s32ChnNum>1) {s32Ret SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, enSize[0], &stSize);if (HI_SUCCESS ! s32Ret){SAMPLE_PRT("SAMPLE_COM…

下载网页视频的软件 下载网页视频的方法

视频已然成为一种非常有力的展示方式&#xff0c;我们想要下载视频内容&#xff0c;需要用到下载网页视频的软件&#xff0c;如今这类软件有很多。下载网页视频的方法&#xff0c;也因为使用的软件不同&#xff0c;方法各异。下面我们就来看详细介绍吧&#xff01; 一、下载网…

【DC-DC】AP9196 DC-DC升压恒流电源管理芯片 升降压3-12V输出9V LED驱动方案

1&#xff0c;方案;升降压3-12V输出9V LED驱动方案BOM表 ​ 2&#xff0c;方案;升降压3-12V输出9V LED驱动方案线路图 3&#xff0c;产品说明 AP9196 是一系列外围电路简洁的宽调光比升压调光恒流驱动器&#xff0c;适用于 3-40V 输入电压范围的 LED照明领域。AP9196 采用我…