Python里面的self,是谁啊?

Python内里的self,是谁啊?

各位学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即代表着实例(目标)本身

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享