python 进阶(1) -- self 简单理解


简单一句话,我们是伙伴


结论

  1. self 在定义时需要定义,但在调用时会自动传入
  2. self 的名字可以变更
  3. self 总是指调用时的类的实例

下面就上面三点进行解释


先看一个例子

>>> class Test(object):
...     def testSelf(self):
...         print(self)
...
>>> t = Test()
>>> t.testSelf()
<__main__.Test object at 0x00000182DEB82F98>

从例子可以看出,self 实际上是类的对象

在 python 机制中,当我们执行 t.testSelf() 时,实际上执行的是 Test.testSelf(t), 其会把生成的对象 t 传递给 self,所以实际打印出来的就是 t 了,因此,self 代表的是类的实例

所以说,当使用类的实例调用类的方法时,self 是不能够省略的,因为 python 有自动传递参数

那换一个角度想,如果直接执行 Test.testSelf() 的话,是不是在定义类的时候把 self 去掉了,答案是肯定可以去掉的,因为这时候并没有传递实例进去,但这样适应就没有意思了,对吧

另外,因为 self 仅仅只是代表一个参数,所以他的名字也就可以变更了,但还是约定成俗的比较好

最后,因为我们传进去的是相应类的实例对象,所以 self 也就总是指向调用时的类的实例

也就是说,某一个类里面的 self 不一定指向这个类的实例对象,可能是其他类的