天天看点

Python - 面向对象编程 - self 参数

 在类里面,所有实例方法都需要加 self 参数,且排在第一个,有且仅有一个

在类中定义的方法,第一个参数 self 指向调用该方法的实例对象,在方法中通过  self.属性 这样的形式访问对象的实例属性

其实并不是哦

Python 只是规定,无论是构造方法还是实例方法,最少要包含一个参数,并没有规定该参数的具体名称

之所以将其命名为 self,只是约定俗成的一种习惯,遵守这个约定,可以使我们编写的代码具有更好的可读性,大家一看到 self,就知道它的作用

你想叫 polo 也可以

只是可读性很差

如果把类比作造房子的图纸

类实例化后的对象是真正可以住的房子

根据一张图纸(类),可以设计出成千上万的房子(实例对象)

每个房子长相都是类似的(都有相同的实例属性和实例方法),但它们都有各自的主人

如何区分不同的房子:通过 self 参数,可以保证每个房子的主任仅能进入自己的房子(每个实例对象只能调用自己的实例属性和实例方法)

一个类可以产生多个实例对象,当某个实例对象调用实例方法,该对象会把自身的引用作为第一个参数自动传递给该方法

换句话说:Python 会自动将实例方法的第一个参数指向调用该方法的对象

这样,Python 解释器就知道到底要执行哪个对象的实例方法了

调用实例方法的时候,不需要手动为第一个参数传值

 很明显,self 存的就是调用该实例方法的实例对象的引用

所以!谁调用实例方法,self 就是谁!