init是为实例对象添加属性的一个方法,也叫构造器、魔术方法。
举个例子,我们创建了一个学生类,实例化三个学生,如果没有init,我们可以这样给每个学生对象添加属性。
class Student():
classes = "oldboy"
obj1 = Student() # 实例化一个学生的对象
obj2 = Student()
obj3 = Student()
obj1.name = "tianjianyu" # 为每一个对象定制自己的特征属性
obj1.age = 22
obj1.sex = "male"
obj2.name = "lishen"
obj2.age = 23
obj2.sex = "male"
obj3.name = "wanghao"
obj3.age = 32
obj3.sex = "male"
但是这样重复了很多代码,我们可以写一个函数,同样也可以达到添加属性的目的
class Student():
classes = "oldboy"
obj1 = Student() # 实例化一个学生的对象
obj2 = Student()
obj3 = Student()
def chushihua(obj, x, y, z):
obj.name = x
obj.age = y
obj.sex = z
chushihua(obj1, "tianjianyu", 22, "male")
chushihua(obj2, "lishen", 23, "male")
chushihua(obj3, "wanghao", 22, "male")
有了上一步的操作,我们还可以把这个函数放到类里边,就像这样
class Student():
classes = "oldboy"
def chushihua(obj, x, y, z):
obj.name = x
obj.age = y
obj.sex = z
obj1 = Student()
Student.chushihua(obj1, "tianjianyu", 22, "male")
obj2 = Student()
Student.chushihua(obj2, "lishen", 22, "male")
obj3 = Student()
Student.chushihua(obj3, "wanghao", 22, "male")
到这里,是不是跟我们的____init____方法很像了呢
class Student():
classes = "oldboy"
def __init__(self, x, y, z): # self等同于obj可以改变,但一般约定是self,x=name,y=age,z=sex
self.name = x
self.age = y
self.sex = z
obj1 = Student("tianjianyu", 22, "male") # Student.__init__(obj1,"tianjianyu",22,"male)
obj2 = Student("lishen", 23, "male")
obj3 = Student("wanghao", 33, "sex")
总结:init方法其实就是python为我们提供的一个给实例对象添加属性的方法,不必我们再去单独操作,在实例化对象的就为对象添加属性
注意:实例化的时候第一步是创建对象,然后才会检查是否实现init方法,当发现内部存在此方法,init方法将会被调用,实例对象作为第一个参数传进去,也就是self。
当我们定义init方法的时候,这个方法不应有返回值,因为创建对象的时候会返回实例对象本身,如果定义了返回值,就会与之冲突
网友评论