当前位置: 首页 > 科技观察

说说Python中的Self,它是谁?

时间:2023-03-18 23:13:25 科技观察

学习Python面向对象的时候,总会遇到一个难以理解的存在:self。这个自己是谁?为什么每个类实例方法都有一个参数self?self有最简单的方法,就是你把self当作“实例(对象)身份证”。不能直接使用Python类。只有创建实例(对象)才能发挥它们的作用。每个实例(对象)都是唯一的,它可以调用类的方法和属性。类就像灵魂附体,让实例(对象)拥有自己的(自我)功能。初学者会发现类方法(构造方法和实例方法)中会有一个固定的参数self。其实这个参数代表的是实例(对象)本身,就像一张身份证,可以用身份证类方法调用实例。与人类类比,人类是一个Python类。每个人代表一个实例(对象),每个人的身份证代表Python中的自己。每个人都可以凭身份证上大学、坐高铁、住酒店……(方法),Python中的实例(对象)也可以用self来调用类的方法。上面用一个类比来解释self的意思。毕竟,self代表实例本身。“当实例(对象)调用类方法时,对象会自动将自己的引用作为第一个参数传递给This方法,第一个参数为self。”而self只是一种约定,你可以将self替换成其他任何名字,不会改变代码的意思,但我们一般不会这样做。为了更好的说明self的作用,我们举个例子。下面有一个Students类:考试成绩为{}".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:student_a=Students('studend_a')print(studend_a.study(80))输出结果:学生student_a的考试成绩为80,实例对象地址为<“main”.Studentsobjectat0x00000129EB0F6A90>。例student_b:studentd_b=Students('studend_b')print(studend_b.study(80))输出结果:学生studentd_b的考试成绩为80,实例对象地址为<“main”.Studentsobjectat0x00000129EB0F6B38>。可以清楚的看到两个实例打印出来的self是不一样的,因为self代表的是实例(对象)本身。以实例student_b为例,打印self时出现如下对象信息。<__main__.Studentsobjectat0x00000129EB0F6B38>。如果我们再次打印student_b,会出现同样的结果。print(student_b)输出:<__main__.Studentsobjectat0x00000129EB0F6B00>。这时候是不是很清楚了,类被实例化后,self代表的是实例(对象)本身。