ref:https://www.cnblogs.com/liyichen/p/5931840.html
关于__init__()函数,其本身是python的构造方法。如果不清楚这一点,看着ta就会一脸懵逼。
这个函数类似init()初始化方法,来初始化新创建对象的状态,在一个对象被创建以后会立即调用,
比如像实例化一个类:
class Cats: def __init__(self): self.age = 2 >>>mimi = Cats() >>>mimi.age >>>2
我们会发现在初始化Cats中的age的值为2之后,
实例化直接就能够调用age的值.
在明白了构造方法之后,我们来点进阶的问题,那就是构造方法中的初始值无法继承的问题。
class Dog: def __init__(self): self.hungry = True def eat(self): if self.hungry: print 'wang' else: print 'no' class hsq(Bird): def __init__(self): self.fur = 'white' def play(self): print ("chaijia") hh = haq() hh.play() #能正常输出 hh.eat() #报错,因为hsq中没有hungry特性
原理:在调用了一个实例的方法时,该方法的self参数会自动绑定到实例上(称为绑定方法);
解决:使用super函数(只在新式类中有用)
class hsq(Dog): def __init__(self): super(Dog,self).__init__() self.sound = 'Squawk' def sing(self): print self.song()
在经典类中一般会直接写:Dog.__init__(self) 替代 super(Dog,self).__init__()
至于新式类,经典类,换篇再说。。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------读书湖边学python