鱼C论坛

 找回密码
 立即注册
查看: 948|回复: 4

[已解决]关于self

[复制链接]
发表于 2022-2-6 18:29:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如何更好的理解self? (学完类和对象后还是感觉self很模糊)
最佳答案
2022-2-6 18:47:13

self 其实表示的就是对象本身,可以这样去理解:

例如我们定义了一个鱼类 Fishc,那么当我们创建一个类的实例对象时,即 f = Fishc() 、f2 = Fishc() 时

此时 类 的实例 f 中的 self 就为 f、实例 f2 中的 self 就为 f2

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-6 18:47:13 | 显示全部楼层    本楼为最佳答案   

self 其实表示的就是对象本身,可以这样去理解:

例如我们定义了一个鱼类 Fishc,那么当我们创建一个类的实例对象时,即 f = Fishc() 、f2 = Fishc() 时

此时 类 的实例 f 中的 self 就为 f、实例 f2 中的 self 就为 f2

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-6 18:49:29 | 显示全部楼层
本帖最后由 阿奇_o 于 2022-2-6 19:11 编辑

打个比喻:
假设 你是一头小猪仔,你被猪妈妈生出来、创造出来的过程就是 __new__()和__init__()这两个"特殊方法"共同作用的结果。

这里的 "猪妈妈",就是 你所自定义的类,如 class Zhu: ...
每一头 小"猪仔",就是 类的实例对象,在 定义时,约定俗成地 叫做 self (也可写其他名)

当 pig1 = Zhu() 时, 会有类似 pig1 = self 的赋值操作(绑定),self又指向 由 __new__()和__init__() 创造出来的直接内存对象地址(在内存上生成具体"实例对象",然后把某个字符名指向和绑定到该内存地址),
即pig这个名字 被绑定到 某个实际的内存地址(Zhu类的一个实例对象),也由此,pig1 就成了 Zhu类的一个实例对象。

其他 pig2 = Zhu() ; pig3 = Zhu(); ... 也是一样这样被创造出来的。

注:不管__new__和__init__你是否自定义(不管你有没有写),它都会在构造实例时,被触发、被调用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-6 22:24:35 | 显示全部楼层
本帖最后由 isdkz 于 2022-2-7 00:49 编辑

self就是自己的意思,
在对象与对象或由对象本身产生的操作中得确定是哪个对象产生的动作(方法),需要用到哪个对象的属性,这时候就需要一个称呼来确定是哪个对象,
不同的对象之间称呼用名字即可,就比如你要找某个人称呼他的名字即可,
但是自己称呼自己总不能也叫名字吧,就像你称呼自己也不会用名字来称呼一样,通常我们用“我”,就像python约定俗成地用self一样,这个self是由python解释器自动传给第一个形参的,
不过这不是硬性规定地,就比如你自己可以称呼自己为“本人”、“某”,
python里面形参的名字也是可以随意变动的,self作为对象方法的形参,名字也是可以随意改动的,你可以把self换成别的名字,
但是最好使用约定俗成的方式,有利于别人阅读你的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-8 21:10:01 | 显示全部楼层
不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 13:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表