第7.5节 揭开Python类中self的面纱

Python中的`self`:深入理解实例方法的第一个参数 self在Python的面向对象编程中,self是一个核心概念,它代表了对象的实例。通过self,对象的方法可以访问和修改它的属性,调用其他方法,并支持继承和多态。虽然它只是一个普通的参数名,但它在Python编程中有着特殊的意义,为编写清晰、结构化和可维护的代码提供了基础。 阅读详情

在上节已经引入介绍了类定义,并简单介绍了类变量、实例变量、类方法和实例方法,后面章节还会进一步详细介绍相关的内容。本节要介绍的self是与类变量、实例变量、类方法和实例方法具体定义实现强相关的。
一、什么是self?
在Python中self实际上是指向类声明的实例对象自身,如果要在实例方法中访问实例变量,必须在变量前加“self.”。显然,self很有用,甚至必不可少。如果没有它,所有的方法都无法访问对象本身的属性。

二、    self的使用
1.    定义实例方法时,self必须是方法的第一个参数,这种类的方法定义中传递第一个参数为self的方法即使实例方法;
2.    self代表类的实例,而非类,而self.__class__则指向类, self在定义时不可以省略;
3.    在实例化方法调用时,程序不用将调用方的实例作为参数放到调用方法的实参里,而是由Python自动进行处理,自动将实例对象传递给实例方法。以上节的Duck类作为例子,其三个方法定义时都有self作为参数,但在实例对象调用swim的代码中却无参数。;
4.    实例方法访问实例变量时,必须通过self访问,否则赋值语句会被认为是给方法的局部变量赋值,非赋值语句会报变量没有定义;
5.    类的实例变量可以通过“实例名.属性”的在实例方法和类外面直接访问。
1)    有个例外,变量名如果是两个下划线开头,则无法这样直接访问。
2)    两个下划线开头的变量,可以通过变量名前加一个下划线+和类名的方式访问。例如如果在Duck类内定义了一个实例变量:”__weight”,实际访问时可以通过”实例名._Duck__weight”的变量名访问。但这种方式不是Python推荐的,老猿也不推荐;
3)    这种加两个下划线的变量类似于c++的私有变量,其访问应该通过实例方法访问,否则对于未知类实现方式的实例直接访问可能引发未知的错误;
6.    如果类的方法中没有self参数,在类的方法定义和调用时均不传类实例是可以的,这样的方法就是类方法和静态方法;
7.    “self”这个名字并不是Python强制的名字,只是一种约定俗成,实际上你完全可以起个别的任意名字,如“this”、“me”、“aaa”等,实际上不同实例方法中这个名字都可以不一致,如在构造函数中叫“self1”,在析构函数中叫“self2”,在其他实例方法叫不同的任意名称都可以,但是Python都会作为对象自身处理,并能正确访问,但为了大家方便理解,还是建议大家叫self。使用一个标准的名称有很多优点——你的程序读者可以迅速识别它,如果使用self的话,还有些IDE(集成开发环境)也可以帮助你。

最后有个问题,Python中实例方法第一个参数是“self”,但它又是可以任意命名的,那怎么知道第一个参数是不是实例方法要的self呢?或者说怎么知道这个方法是不是实例方法呢?大家想一想,答案将在后面章节揭晓。
本节介绍了Python中类中神秘的self,有关内容涉及面较广,但实际上理解之后也就比较简单。
老猿Python(https://blog.youkuaiyun.com/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
欢迎大家批评指正,谢谢大家关注!

Python中self用法详解 Python中类、实例以及self的详解 阅读详情

相关推荐

别再死记公式了!用Python手写一个Self-Attention,带你彻底搞懂Transformer核心

本文通过Python手写实现Self-Attention机制,深入解析Transformer的核心原理。从环境准备到矩阵运算,逐步拆解Q、K、V矩阵的计算过程,并通过可视化展示注意力权重的分配逻辑。无需死记公式,跟随代码实践即可掌握这一改变NLP领域的重要技术。

weixin_30562507的博客 248

python——类中的self和变量

在python的类中会使用到“self”,本文主要是谈谈类中的self和变量的关系。 先看示例代码I。 class Test(object): def __init__ (self, val1): self.val0 = val1 def fun1(self): print(self.val0) def fun2(self, val2): ...

to_qin的博客 2万+

Python类中self的神秘面纱

上述代码定义了一个名为MyClass的类,该类有一个构造函数__init__,初始化了一个value属性,并且还有一个print_value方法,可以打印出value属性的值。接着,我们创建了一个名为obj的实例对象,并将参数5传递给构造函数,最后调用了print_value方法。综上所述,self代表了类的实例对象本身,并在类的构造函数和实例方法中自动被调用。因此,在方法print_value中所写的代码可以使用self访问实例属性,例如上例中的。首先,当我们创建一个类的实例对象时,例如。

NoerrorCode的博客 113

如何理解Python中的self变量?

尝试使用两种方法输出看看 二者的深入理解 查看 一个是类函数 一个是实例的方法 通过==[实例.方法]==调用时候为什么不需要传递参数? ,调用的时候1、self只有在类的方法中才会有,其他函数或方法是不必带self的。 2、在类的方法中(如__init__),第一参数永远是self,表示创建的类实例本身,而不是类本身。 3、针对self参数在调用时不必传入相应的参数。 4、可以把对象的各种属性绑定到self。 5.self不是python的关键字,只是一个约定俗成的,也可以用其他名称命名,但是为了

weixin_44943389的博客 1855

NR RRC协议(2)---RRC连接建立流程

RRC连接建立目的是建立SRB1 RRC连接建立还用于将初始NAS消息从UE传送到网络 RRC连接的初始阶段期间,不激活AS安全性 RRC连接建立由UE侧发起

crg2046的博客 1957

【SLAM】探索explore_lite在移动机器人自主建图中的高效边界检测策略

本文深入解析了explore_lite在移动机器人自主建图中的应用,重点探讨了其高效的贪婪边界检测策略。该工具包专为资源受限平台设计,通过直接利用SLAM生成的地图信息,以极低的计算开销实现快速、稳定的未知区域探索,并与move_base导航框架无缝协作,是轻量级机器人自主探索的优选方案。

purple的博客 1066

Python面向对象编程之self,类变量和实例变量、__init__一文详解+代码展示

​ 面向对象化编程所有的实例对象和实例方法都必须以self作为第一个参数,文章内容接上一章:Python面向对象编程基础之面向对象思想和特点、类和对象。这个系列将会很详细的解释清楚Python面向对象编程这一编程思想是如何具体实现的。 ​............

master_hunter的博客 3471

基于CANoe的车载以太网测试

以太网测试 CANoe

Yafet 4549

python类的构造函数self_第7.5节 揭开Python类中self的面纱

在上节已经引入介绍了类定义,并简单介绍了类变量、实例变量、类方法和实例方法,后面章节还会进一步详细介绍相关的内容。本节要介绍的self是与类变量、实例变量、类方法和实例方法具体定义实现强相关的。一、什么是self?在Python中self实际上是指向类声明的实例对象自身,如果要在实例方法中访问实例变量,必须在变量前加“self.”。显然,self很有用,甚至必不可少。如果没有它,所有的方法都无法访...

weixin_39908082的博客 739

ROS2理论与实践_宇树机器人Go2开发指南(文字)

本文介绍了Unitree Go2机器人ROS2开发环境的安装与配置流程。主要内容包括:1)从GitHub克隆unitree_ros2仓库;2)安装ROS2 Foxy版本依赖项;3)编译特定版本的CycloneDDS(0.10.2);4)编译unitree_go和unitree_api功能包;5)网络配置,包括设置静态IP和修改环境变量脚本setup.sh以指定网络接口。文章还提供了本地回环测试的替代方案,并建议配置完成后重启电脑。整个流程涉及ROS2环境切换、网络适配和编译安装等多个技术环节。

Li_Dongyi的博客 4205

微信爬虫服务器,微信文章爬虫使用教程 - 八爪鱼采集器

对于某些用户来说,直接自定义规则可能有难度,所以在这种情况下,我们提供了网页简易模式,网页简易模式下存放了国内一些主流网站爬虫采集规则,在你需要采集相关网站时可以直接调用,节省了制作规则的时间以及精力。微信文章采集下来有很多作用,比如可以将自己行业中最近一个月之内发布的内容采集下来,然后分析文章标题和内容的一个方向与趋势。所以本次介绍八爪鱼简易采集模式下“搜狗公众号”的使用教程以及注意要点。步骤一...

weixin_26712065的博客 3256

在python中定义类时实例方法的第一个参数名称_第7.5节 揭开Python类中self的面纱...

在上节已经引入介绍了类定义,并简单介绍了类变量、实例变量、类方法和实例方法,后面章节还会进一步详细介绍相关的内容。本节要介绍的self是与类变量、实例变量、类方法和实例方法具体定义实现强相关的。一、什么是self?在Python中self实际上是指向类声明的实例对象自身,如果要在实例方法中访问实例变量,必须在变量前加“self.”。显然,self很有用,甚至必不可少。如果没有它,所有的方法都无法访...

weixin_39845206的博客 6587

模型训练篇 | 手把手教你使用ResNet训练自己数据集和推理,ResNet50通用物体分类识别,含完整代码和数据集,全网最详细教程

手把手教你使用ResNet训练自己数据集和推理,ResNet50通用物体分类识别,含完整代码和数据集,全网最详细教程。本篇文章将带你学习 ResNet50 模型构建、ResNet50训练自己数据集、数据集处理、推理和验证、模型剪枝与模型改进等。 本篇教程适配各种分类识别任务,可以说是一个通用的教程,只需修改自己的数据集即可完成自己领域的任务和系统实现。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 728

Python中的self有什么作用

在这篇深入探讨Python中selfself是对类实例自身的引用,它是Python实现面向对象编程的核心机制。self使得方法可以访问和修改实例的属性和其他方法。Python会自动将实例作为第一个参数传递给实例方法。正确使用self可以实现数据封装、方法链接、属性管理等高级功能。需要注意避免一些常见的陷阱,如忘记在方法定义中包含self或在静态方法中误用self。为了更好地掌握self保持一致性: 始终使用self作为实例方法的第一个参数名。

一个8年大数据开发工程师的碎碎念 1906

OpenClaw赚钱实录:从“养龙虾“到可持续变现的实践指南——OpenClaw的赚钱底层逻辑与“记忆”革命

AI 的商业价值不在于替代思考,而在于沉淀关系。当 Agent 记住你的偏好、你的历史、你的目标,它就不再是冷冰冰的软件,而是成为数字化的关系资产。这种资产的稀缺性不在于技术复杂度,而在于时间无法被压缩——你无法用更好的算法替代 3 个月的协作记忆。在这场“记忆革命”中,护城河不是模型参数,而是用户与 AI 共同书写的历史。OpenClaw 用一套优雅的文件系统架构,将这种历史转化为可积累、可复用、可变现的数字资产。从“计算即服务”(CaaS)到“记忆即服务”(MaaS)。

冯·诺依曼 1341

TC397 EB MCAL开发从0开始系列 之 [13.1] Dma配置实战 -实现M2M数据传输(读存储写存储)

TC3XX TC397 MCAL DMA 从0搭建测试用例-实现M2M 存储到存储数据传输

yy九歌的博客 1913

第8.1节 Python类的构造方法__init__深入剖析:语法释义

一、 引言 凡是面向对象设计的语言,在类实例化时都有构造方法,很多语言的构造方法名与类名一致,Python中类的构造方法比较特殊,必须是__init__特殊方法。 二、 语法释义 1. 语法:__init__(self,*args,**kwargs) 其中: 1) self为创建的实例,由Python自动传入。 各位看官注意: 1>关于self在此不进行详细介绍,如...

老猿Python 2657

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

python类的构造方法名称_第8.1节 Python类的构造方法__init__深入剖析:语法释义

一、 引言凡是面向对象设计的语言,在类实例化时都有构造方法,很多语言的构造方法名与类名一致,Python中类的构造方法比较特殊,必须是__init__特殊方法。二、 语法释义1.语法:init(self,*args,**kwargs)其中:1)self为创建的实例,由Python自动传入。请注意:关于self在此不进行详细介绍,如果需要了解请参考本博《第7.5节 揭开Python类中self的面纱...

weixin_39963830的博客 436

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Python EXE逆向分析终极指南:揭开PyInstaller与py2exe打包程序的神秘面纱

你是否曾好奇那些Python打包的EXE文件内部究竟藏着什么秘密?Python EXE解包工具就是你的"X光机",能够透视PyInstaller和py2exe打包程序的内部构造,让逆向工程变得简单而高效。 ## 🔍 为什么需要Python EXE解包工具? 在安全分析、代码审计和技术研究领域,**Python EXE逆向分析**已成为必备技能。无论是分析可疑的恶意软件,还是审查第三方Pyth

gitblog_00762的博客 408

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

python中类的构造方法中怎么定义参数_第8.1节 Python类的构造方法__init__深入剖析:语法释义...

一、 引言凡是面向对象设计的语言,在类实例化时都有构造方法,很多语言的构造方法名与类名一致,Python中类的构造方法比较特殊,必须是__init__特殊方法。二、 语法释义1. 语法:__init__(self,*args,**kwargs)其中:1) self为创建的实例,由Python自动传入。各位看官注意:1>关于self在此不进行详细介绍,如果需要了解请参考...

weixin_35861221的博客 425

python提供的默认的构造方法是什么_第8.1节 Python类的构造方法__init__深入剖析:语法释义...

一、 引言凡是面向对象设计的语言,在类实例化时都有构造方法,很多语言的构造方法名与类名一致,Python中类的构造方法比较特殊,必须是__init__特殊方法。二、 语法释义1.语法:init(self,*args,**kwargs)其中:1)self为创建的实例,由Python自动传入。请注意:关于self在此不进行详细介绍,如果需要了解请参考本博《第7.5节 揭开Python类中self的面纱...

weixin_39751391的博客 1162

python什么时候要构造方法init_第8.1节 Python类的构造方法__init__深入剖析:语法释义...

一、 引言凡是面向对象设计的语言,在类实例化时都有构造方法,很多语言的构造方法名与类名一致,Python中类的构造方法比较特殊,必须是__init__特殊方法。二、 语法释义1. 语法:__init__(self,*args,**kwargs)其中:1) self为创建的实例,由Python自动传入。各位看官注意:1>关于self在此不进行详细介绍,如果需要了解请参考...

weixin_26775679的博客 317

第8.32节 Python中重写__delattr__方法捕获属性删除

一、 引言 上节介绍了__delattr__方法在Python清除实例属性时被捕获执行,本节结合例子介绍重写__delattr__方法,并说明__delattr__方法执行的触发逻辑。 二、 重写__delattr__方法 重写语法: __delattr__(self,属性) 语法释义 __delattr__语法很简单: 1)self是所有实例方法都必须有的第一个参数,大家如果有疑问可以参...

老猿Python 2854

python隐藏类的属性 重写__dir___第8.32节 Python中重写__delattr__方法捕获属性删除

一、引言上节介绍了__delattr__方法在Python清除实例属性时被捕获执行,本节结合例子介绍重写__delattr__方法,并说明__delattr__方法执行的触发逻辑。二、重写__delattr__方法重写语法:__delattr__(self,属性)语法释义__delattr__语法很简单:1)self是所有实例方法都必须有的第一个参数,大家如果有疑问可以参考老猿前面的博文《第7.5...

weixin_29386469的博客 178
上一篇: 第7.4节 Python中与众不同的类
下一篇: 第7.6节 Python中类的继承机制详述
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值