super()详解 python

Python中类的初始化都是__init__(), 所以父类和子类的初始化方式都是__init__(), 但是如果子类初始化时没有这个函数,那么他将直接调用父类的__init__(); 如果子类指定了__init__(), 就会覆盖父类的初始化函数__init__(),如果想在进行子类的初始化的同时也继承父类的__init__(), 就需要在子类中显示地通过super()来调用父类的__init__()函数。
super()在单继承中的应用:

举个例子:


 
 
  1. class Animal: # 定义一个父类
  2. def __init__(self): # 父类的初始化
  3. self.name = 'animal'
  4. self.role = 'parent'
  5. print( 'I am father')
  6. class Dog(Animal): # 定一个继承Animal的子类
  7. def __init__(self): # 子类的初始化函数,此时会覆盖父类Animal类的初始化函数
  8. super(Dog, self).__init__() # 在子类进行初始化时,也想继承父类的__init__()就通过super()实现,此时会对self.name= 'animal'
  9. print( 'I am son')
  10. self.name = 'dog' # 定义子类的name属性,并且会把刚才的self.name= 'animal'更新为'dog'
  11. # animal = Animal()#I am father
  12. xbai = Dog() #I am father,I am son
  13. print(xbai.name) #'dog'
  14. print(xbai.role) #'parent'

说明:super(Dog,self)也可以写成super(),可以理解成super(Dog,self).__init__() == Animal.__init__(self),( super(Dog,self) == Animal ) 即其返回的是当前类的继承顺序中(针对多继承)Dog后的一个类(也即类Animal)

self 和 super的区别:

    self会首先调用自己的方法或者属性,当自身没有目标属性或方法时,再去父类中寻找;super会直接去父类中寻找目标属性或方法。如上述代码中定义完第十行后,self.name的返回值为’dog’,而super().name的返回值为’animal’;
    self时类,super是预编译指令


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值