关于def __init__():

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

posted @ 2018-09-05 16:52  我在独墅湖边  阅读(7374)  评论(1编辑  收藏  举报