1. self是什么
Python的self其实就相当于C++的this指针。如果把类比作是图纸,那么由类实例化后的对象才是真正可以住的房子。根据一张图纸可以设计出成千上万的房子,它们长得都差不多,但它们都有不同的主人。每个人都只能回自己的家里,陪伴自己的孩子。。。。。。所以self这里就相当于每个房子的门牌号,有了self,你就可以轻松找到自己的房子。
Python的self参数就是用一个道理,由同一个类可以生成无数对象,当一个对象的方法被调用的时候,对象会将自身的引用作为第一个参数传给该方法,那么Python就知道需要操作哪个对象的方法了。如下面的例子:
class Ball:
def setName(self, name):
self.name = name
def kick(self):
print("我叫 %s, 嗷~谁踢我?!" %self.name)
a = Ball()
a.setName("飞火流星")
b = Ball()
b.setName("团队之星")
c = Ball()
c.setName("土豆")
a.kick()
b.kick()
c.kick()
2. self代表类的实例,而非类
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是self。
init()方法是构造方法
类有一个名为init() 的特殊方法(构造方法),该方法在类实例化时会自动调用。由于类起到模板的作用,因此,可以在创建实例的时候,把我们认为必须绑定的属性强制填写进去。这里就用到Python当中的一个内置方法init方法,例如在Student类时,把name、score等属性绑上去:
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
student = Student("Hugh", 99)
student.name
student.score
这里需要注意:(1) init方法的第一参数永远是self,表示创建的类实例本身,因此,在init方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。(2)有了init方法,在创建实例的时候,就不能传入空的参数了,必须传入与init方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去: