python单继承,多继承,以及重写,和super()调用

单继承

- 在python中 来类中 子类继承了父类 子类就拥有了父类的属性和方法

  • 格式: class 子类名(父类名):
class Prentice(Master):
    pass

单继承 就是只有一个父类

说明:

虽然子类没有定义__init__方法初始化属性,也没有定义实例方法,但是父类有。所以只要创建子类的对象,就默认执行了那个继承过来的__init__方法
总结:
子类在继承的时候,在定义类时,小括号()中为父类的名字
父类的属性、方法,会被继承给子类

多继承

多继承格式: class 子类名(父类1, 父类2, …):

class Prentice(Master, School):
    pass
  1. 如果子类继承了多个父类 如果父类的方法名相同 那么子类会继承第一个父类方法
  2. 如果子类继承了多个父类 如果父类的方法名不同 那么子类会全部继承方法
  3. 在使用类创建一个对象的时候就会执行init方法
  4. 如果子类实现了init方法 会走自己子类中的init方法
  5. 如果子类没有实现init方法 会找继承父类的init方法
  6. 为什么子类继承了父类 子类就拥有了父类的属性?
  7. 前提是继承了父类的init方法 才使用父类的init 给自己设置属性
  8. 先继承方法的 然后继承了父类的属性
  9. 如果多个父类有同名的属性和方法,则默认使用第一个父类的属性和方法(根据类的魔法属性mro的顺序来查找)

说明:

多继承可以继承多个父类,也继承了所有父类的属性和方法
注意:如果多个父类中有同名的 属性和方法,则默认使用第一个父类的属性和方法(根据类的魔法属性mro的顺序来查找)
多个父类中,不重名的属性和方法,不会有任何影响。

子类重写父类同名属性和方法

重写: 子类继承了父类 在子类中实现了父类已有的方法或者属性 就叫做重写
子类继承父类 重写父类的方法 做自己特有的事情
子类调用父类同名属性和方法

class Master(object):
 
    def __init__(self):
        self.kongfu = "古法配方"
        
class Prentice(Master):
    def __init__(self):
        self.kongfu = "现代配方"
  1. 子类继承了父类
  2. 子类重写了父类的同名的属性和方法
  3. 那么子类会使用自己的属性 和 方法

子类调用父类同名属性和方法

  • 格式: 父类名.同名方法名(self)
  • 核心点:
    无论何时何地,self都表示是子类的对象。在调用父类方法时,通过传递self参数,来控制方法和属性的访问修改。

核心点:

无论何时何地,self都表示是子类的对象。在调用父类方法时,通过传递self参数,来控制方法和属性的访问修改。

super()

  • 如果子类继承了父类 子类重写了父类的同名方法 而且子类想调用父类的这个同名方法一共有三种方式
  • 1 父类名.父类方法名(self)
  • 2super(子类名, self).父类方法名()
  • 3 super().父类方法名()
  • 2 和 3 只适用于新式类
  • 2 和 3一般用于单继承 也可以是多继承 但是只能调用第一个父类的方法
  • 1 适用于单继承或者多继承都可以

知识点:

子类继承了多个父类,如果父类类名修改了,那么子类也要涉及多次修改。而且需要重复写多次调用,显得代码臃肿。
使用super() 可以逐一调用所有的父类方法,并且只执行一次。调用顺序遵循 mro 类属性的顺序。
注意:如果继承了多个父类,且父类都有同名方法,则默认只执行第一个父类的(同名方法只执行一次,目前super()不支持执行多个父类的同名方法)
super() 在Python3.3之后才有的机制,通常用于单继承中的多层继承。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值