# 类函数的self Python 要求,类方法(构造方法和实例方法)中至少要包含一个参数,但并没有规定此参数的名称(完全可以叫任意参数名),之所以将类方法的第一个参数命名为 self,只是 Python 程序员约定俗成的一种习惯,这会使程序具有更好的可读性。 通常在写class的时候,定义多个方法,只需要self.一下这个方法名就可以调用和执行这个方法,这实际上是一个python的内部寻址机制,叫做命名空间检索。 1,self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以 ; 2,self在定义类的方法时是必须位于第一个参数; 3,self总是指向调用时的类的实例; 4,self就是本身的意思,为了便于程序的,就得在类这个调用多个函数中,先申明自己是谁,到底是self,还是self. 所以必须有参数; ``` class Stu: def __init__(self): self.age = 18 def A(MM): # 修改self的名字为MM print('A') print(MM.age) print(id(MM.age)) print('--------') def B(GG): print('B') GG.age = 19 # 改变age的值 print(GG.age) print(id(GG.age)) print('--------') def C(self): print('C') print(self.age) print(id(self.age)) print('--------') a = Stu() a.A() a.B() a.C() ``` ![img](https://img-blog.csdnimg.cn/4df07cd76007426da04944369adbfc0b.png) 小结 : 1,__init__(self): 初始化的属性变量 self.age = 18,为公共属性; 2,在定义A函数的时候参数名修改为 MM, M.age 依然可以获取到 __init__(self): 下的 self.age = 18; 3,公共的self 初始化定义的值,从上至下,B函数中赋值19给变量age是可以被修改的 C函数中self.age 已经为19; 4,C和B,分别调用的.age值的内存地址是一致的,B函数如果不给.age赋值19 ,实践上A,B,C分别的 .age 的 值和内存地址都是一致的