WHCSRL 技术网

python 类里面函数的self

Python 要求,类方法(构造方法和实例方法)中至少要包含一个参数,但并没有规定此参数的名称(完全可以叫任意参数名),之所以将类方法的第一个参数命名为 self,只是 Python 程序员约定俗成的一种习惯,这会使程序具有更好的可读性。

通常在写class的时候,定义多个方法,只需要self.一下这个方法名就可以调用和执行这个方法,这实际上是一个python的内部寻址机制,叫做命名空间检索。

1,self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以 ;

2,self在定义类的方法时是必须位于第一个参数;

3,self总是指向调用时的类的实例;

4,self就是本身的意思,为了便于程序的,就得在类这个调用多个函数中,先申明自己是谁,到底是self,还是self. 所以必须有参数;

  1. class Stu:
  2. def __init__(self):
  3. self.age = 18
  4. def A(MM): # 修改self的名字为MM
  5. print('A')
  6. print(MM.age)
  7. print(id(MM.age))
  8. print('--------')
  9. def B(GG):
  10. print('B')
  11. GG.age = 19 # 改变age的值
  12. print(GG.age)
  13. print(id(GG.age))
  14. print('--------')
  15. def C(self):
  16. print('C')
  17. print(self.age)
  18. print(id(self.age))
  19. print('--------')
  20. a = Stu()
  21. a.A()
  22. a.B()
  23. a.C()

小结 :

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 的 值和内存地址都是一致的

 

推荐阅读