25.python之类的继承和多态

继承:

  • 被继承的类是父类(基类),继承的类是子类
  • 通过继承基类来获取基类的功能
  • 子类有父类所有的属性和方法
  • 父类没有子类独有的属性和方法
  • 自定义的类默认继承object类

用法:

  • 定义子类时,将父类传入子类参数内
  • 子类实例化,可以调用自己独有的和父类的属性和方法
  • 父类无法调用子类的属性和方法

例:

# 父类
class Parent():
    def __init__(self, name = '张三'):
        self.name = name
    def p1(self):
        return '父类'

# 子类
class Child1(Parent):
    def c1(self):
        return '子类'

# 实例化
c = Child1()

# 调用父类的属性
print(c.name)
# 调用父类的函数
print(c.p1())
# 调用子类的函数
print(c.c1())

结果:
在这里插入图片描述

super函数

  • 子类继承父类的方法时使用
  • 在子类中可以调用父类的方法
  • 使用:super(当前类名,self)

例:

# 父类
class Parent():
    def __init__(self, p):
        self.p = p
        print('父类')
    def p1(self):
        print(f'父类p1:{self.p}')
    def p2(self, a):
        print(f'父类p2:{a}')

# 子类
class Child1(Parent):
    def __init__(self, c, p):
        #super(Child1,self).__init__(p),super中的参数可以省略
        super().__init__(p)  # 使用super调用父类中的构造方法
        self.c = c
        print('子类')
    def c1(self, a):
        super().p1()  # 使用super调用父类中的方法p1
        super().p2(a)  # 使用super调用父类中的方法p2
        print(f'父类:{self.c}')

# 实例化
c = Child1('子','父')

print('----------')
c.c1('aa')

结果:
在这里插入图片描述

多态

  • 子类中重写父类的方法
  • 子类中某个函数名与父类中的函数名的相同,但是功能不同

例:

# 父类
class Parent():
    def like(self):
        print('父亲喜欢橘子')

# 子类 ,重写父类方法like
class Xiaoming(Parent):
    def like(self):
        print('小明喜欢苹果')

son = Xiaoming()
son.like()

father = Parent()
father.like()

结果:
在这里插入图片描述

多重继承

  • 子类可以同时继承多个父类,拥有多个父类的属性和方法

例:

# 父类1
class Father():
    def like(self):
        print('喜欢橘子')
    def dump(self):
        print('会跳')

# 父类2
class Mother():
    def like(self):
        print('喜欢苹果')
    def run(self):
        print('会跑')

# 子类 ,继承多个父类
class Xiaoming(Father, Mother):
    pass

son = Xiaoming()
son.dump()
son.run()

# 父类是从左向右继承,所以先继承Father再继承Mother
# 此函数like在2个父类中都有,且功能不同
son.like()

# 类名.__mro__,可以打印此类的继承逻辑
print(Xiaoming.__mro__)

结果:
在这里插入图片描述

总结:

  1. 多个父类,根据传入的父类名称从左向右开始继承,根据最后一句打印,可以看出是先继承Father再继承Mother,object是前面2个父类继承的,相当于在此类最右边
  2. 若是多个父类中有相同的方法,根据倒数第二句打印的是父类Father的功能可知:多个父类,有多个相同函数名,最终继承的是从左到右数的第一个有此函数的类
  3. 继承多个父类,拥有所有这些父类的属性和函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值