为了说清楚 self 是个什么东西,你首选需要搞清实例与类之间的关系。
人就是一种类,人有名字,身高,体重等属性,不同人这些属性都是不一样的,除此之外,人还有很多方法(功能),例如,思考、跑步、睡觉等等。
class Person :
def __init__(self,name) :
self.name = name
def think(self): # self其实就是类函数think的一个普通参数而已,表示被调用的对象,参数具体值也即我们的实例对象
print("{} is thinking".format (self.name) )
具体到每一个人,例如你自己,你身边的每一个具体的人,都是「人类」的实例对象,例如:
xiaoming = Person( "xiaoming")
我构造了一个叫"xiaoming"的人,它是Person类的实例对象,我们给Person类定义了一个think方法,但是需要一个参数,我们可以把xiaoming这个实例对象传递过去。
>>>Person.think(xiaoming) xiaoming is thinking
所以,这里的 self 其实就是类函数 think 的一个普通参数而已,表示被调用对象,具体值即我们的实例对象,那为什么要叫self呢?其实这是约定俗成的,你叫其他名字也没关系,不过通常不这么做,就好比我们平常交流都是用普通话,突然冒出一句洋文,别人不一定能听懂。
那为什么我们平常调用 think 方法的时候不是这样调用,而是直接用**[实例.方法]**形式调用呢?
>>>Person.think>>> lisi.think >
前者是一个在 Person类 中的普通函数,后者是被绑定了的方法, 因self 其实就是类函数 think 的一个普通参数而已,指被调用对象,参数具体值也即我们的实例对象,当通过[实例.方法]调用时候,该方法与当前实例对象进行了绑定,调用的时候,python会自动把实例对象作为参数传递过去,不需要再传递参数。
>>> xiaoming.think( ) xiaoming is thinking
这就是self的概念
说明:
1、实例继承了类的所有属性和方法。
2、类中_init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法
3、self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数



