python类的继承与多态

本文详细介绍了Python中继承的概念,包括经典类与新式类的区别、方法重写、多继承时的查找顺序等,并通过实例展示了如何实现排序功能。此外,还讲解了多态的概念及其实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继承:
class 类名(父类名)
      子类继承父类,执行初始化__init__时, 子类属性要把 父类名.__init__方法(属性) 全部写上 ,在给对象赋值 
如果子类对象使用父类的方法属性:
    1可以在子类方法中,写上父类的方法及属性 ,     父类__init__方法(属性)         ————经典类写法
    2或者用super调用父类方法, super(或空/或写子类名称,self).__init__(方法属性)——新式类写法
    好处:不用写父类名,当改变父类名称时,可以不用重新改,或继承多个父类,使用属性或方法时,会自动排序执行
    Python3.x 和 Python2.x 的一个区别是:
       Python 3 可以使用直接使用 super().方法(属性)代替 super(Class, self).方法 (属性)


    继承多个父类时,执行从左到右,如果父类方法名称相同,默认调用第一个父类方法,
    多个子类继承同一个父类时,子类的方法各自属于自己不可以共用,
    父类中的私有属性,子类不可以使用,继承父类后,一般情况下实例化子类,不会实例化父类


经典类和新式类:
      新式类后面加(object)
      经典类后面默认不加 
      继承多个父类时,如果多个初始化方法,默认走第一个父类的初始化方法,从左到右执行,如果多个嵌套继承:
          class A:
          class b (A):
          class c (B)
          class d(B,C)
      广度优先——默认执行B- C- A,如果B有初始化方法,则不走其他父类,如果没有在走C执行(横向查询)
      深度优先——默认执行B-A,      ~~~~同上~~~~~~~    如果B没有初始化方法,则去找B的父类(深度查询)
      Python2——经典类按深度优先查询继承,新式类按广度优先查询继承
      python3——经典类和新式类都按广度优先查询继承


方法重写:如果子类中方法名和父类重复,默认用子类方法,如果没有默认用父类。 
                如果想改变父类方法可以子类从新写父类方法,会默认执行子类方法
排列顺序 sort ():

写一个__lt__(顺序)方法(self.定义要比较的属性一个新名称) return 回比较的方式 self.属性 < 新属性名称.属性


排序示例:                      
class Che:
    def __init__(self,pinpai,yanse):
        self.pinpai=pinpai
        self.yanse=yanse
    def qidong(self):
        print("启动小汽车")




class Xiao(Che):
     def __init__(self,pinpai,yanse,zuowei,):
         self.zuowei=zuowei
         super().__init__(pinpai,yanse)
         print("品牌;{0} 颜色{1} 座位{2}".format(self.pinpai,self.yanse,self.zuowei))
     def __lt__(self, other):
         return self.yanse<other.yanse
     def __str__(self):
         return "品牌;{0} 颜色{1} 座位{2}".format(self.pinpai,self.yanse,self.zuowei)




qiche=Xiao("宝马","bb色",9)
# qiche.qidong()
qiche2=Xiao("宝马","cc色",6)
qiche3=Xiao("宝马","aa色",8)


lie=[qiche,qiche2,qiche3]
lie.sort()
for i in lie:
    print(i)         
#执行结果---会自动按照yanse属性abc来排序
品牌;宝马 颜色bb色 座位9
品牌;宝马 颜色cc色 座位6
品牌;宝马 颜色aa色 座位8
品牌;宝马 颜色aa色 座位8
品牌;宝马 颜色bb色 座位9
品牌;宝马 颜色cc色 座位6


多态:统一接口,多种实现,可以用静态方法实现,子类继承父类,重写父类方法,一种同一个方法名展现不同结果,实现多态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值