鱼C论坛

 找回密码
 立即注册
查看: 1668|回复: 5

[已解决]我至今还是不明白,self是啥...(python)

[复制链接]
发表于 2020-7-23 09:56:46 | 显示全部楼层 |阅读模式

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

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

x
哪个大神能通俗易懂的解释一下......
最佳答案
2020-7-23 09:57:55

self 就是实例对象本身

比如你定义了一个 A  类,然后要将 A 类实例化, a = A()  此时实例化对象就为 a ,而且这个实例对象的 self 参数就代表 a


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

使用道具 举报

发表于 2020-7-23 09:57:55 | 显示全部楼层    本楼为最佳答案   

self 就是实例对象本身

比如你定义了一个 A  类,然后要将 A 类实例化, a = A()  此时实例化对象就为 a ,而且这个实例对象的 self 参数就代表 a


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

使用道具 举报

 楼主| 发表于 2020-7-23 10:01:22 | 显示全部楼层
奥,懂了,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-23 10:03:21 | 显示全部楼层
self代表类的实例,而非类。
class Test:
    def prt(self):
        print(self)
        print(self.__class__)

t = Test()
t.prt()

执行结果如下
<__main__.Test object at 0x000000000284E080>
<class '__main__.Test'>

在继承时,不是指定义了 self 的类的实例
class Parent:
    def pprt(self):
        print(self)

class Child(Parent):
    def cprt(self):
        print(self)
c = Child()
c.cprt()
c.pprt()
p = Parent()
p.pprt()

运行结果如下
<__main__.Child object at 0x0000000002A47080>
<__main__.Child object at 0x0000000002A47080>
<__main__.Parent object at 0x0000000002A47240>

解释:
运行c.cprt()时应该没有理解问题,指的是Child类的实例。
但是在运行c.pprt()时,等同于Child.pprt(c),所以self指的依然是Child类的实例,由于self中没有定义pprt()方法,所以沿着继承树往上找,发现在父类Parent中定义了pprt()方法,所以就会成功调用。

在描述符类中,self指的是描述符类的实例
不太容易理解,先看实例:
class Desc:
    def __get__(self, ins, cls):
        print('self in Desc: %s ' % self )
        print(self, ins, cls)
class Test:
    x = Desc()
    def prt(self):
        print('self in Test: %s' % self)
t = Test()
t.prt()
t.x
运行结果如下:
self in Test: <__main__.Test object at 0x0000000002A570B8>
self in Desc: <__main__.Desc object at 0x000000000283E208>
<__main__.Desc object at 0x000000000283E208> <__main__.Test object at 0x0000000002A570B8> <class '__main__.Test'>

self在定义时需要定义,但是在调用时会自动传入。
self的名字并不是规定死的,但是最好还是按照约定俗称用self
self指调用时的类的实例。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2020-7-23 10:18:21 | 显示全部楼层
类与对象还是比较难的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-21 13:26:57 | 显示全部楼层
本帖最后由 Alex_Cai 于 2020-10-21 13:44 编辑
Hello. 发表于 2020-7-23 10:03
self代表类的实例,而非类。


请教一下t.prt()为什么self给了Desc,不理解

不好意思 搞错了  明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 00:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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