self只会在类中定义函数时用到,定义函数时,一般默认把第一个参数写成self,这个self接收的实参是什么呢,其实一个类对象实例,那么这个self参数其实也就是一个变量, 只是这个变量指向类实例, 为什么我们通过实例调用类方法的时候不需要给第一个参数传值呢?是因为python解释器会在调用的时候把调用的类实例传递给方法。
下面通过一段代码来解释
#coding=utf-8
class People():
def __init__(self,name,height,weight):
self.name =name
self.height =height
self.weight = weight
def get_name(aaa): #类里面定义方法的时候第一个参数可以不是self,但是python解释器会把第一个参数当做类实例
return aaa.name
def get_height(self): #self代表的类实例本身,可以看做一个类对象变量
return self.height
p = People("zhangsan",182,60)
name = p.get_name()
print("name=",name)
height = p.get_height() #等价于 height = People.get_heght(p)
print("height=",height)
height1 = People.get_height(p) #这个时候给类函数调用显示给类方法传递了类实例
print("height1=",height1)
执行结果:
可以很明显的看到 类里面每一个方法定义的时候,第一个参数都指的是类实例,这个名字大家约定俗成是self, 但是也可以取其他名字, 而且类实例调用的方法时候不需要给第一个参数传递值。