【Python零基础入门篇 · 16】:类的继承(单继承和多继承)、继承重写、面向对象的多态、静态方法和类方法

目录

一、类的继承(单继承和多继承)

1、语法:class 类名(父类名)

2、继承的分类

3、总结

二、继承重写

1、覆盖父类的方法

2、在父类的方法后增加新的内容

第一种:父类.方法名(self)

第二种:super().方法名() (常用) 

3、类的新式写法

三、面向对象的多态

1、第一种多态展示

2、第二种多态展示

四、静态方法和类方法

1、静态方法

2、类方法

3、总结 


一、类的继承(单继承和多继承)

继承是一种类间关系,描述一个类从另一个类中获取成员信息的类间关系。

继承必定发生在两个类之间,参与继承关系的双方成员是父类子类

1、语法:class 类名(父类名)

子类可以继承父类的所有属性和方法,就算自己没有,也可以使用父类的。 

继承的传递性:

2、继承的分类

单继承子类只继承一个父类

多继承有两个父类的属性和方法,如果两个父类具有同名的方法的时候,调用就近原则

多继承:

定义格式:     class 类名 (父类名1,父类名2,...):  

                                pass

查看方法搜索顺序:

python中内置属性__mro__,可以查看方法搜索顺序,确定子类调用的方法顺序。

3、总结

  • 多继承有同名方法时,在搜索方法时,会先按照mro的输出结果,从左往右的顺序查找
  • 如果当前类的方法中找到了,就直接执行,不再搜索
  • 如果找到最后一个类,还没有找到方法,程序报错


二、继承重写

如果从父类继承的方法不能满足子类的需求,可以在子类中重写父类的方法,这个过程称为方法的覆盖),也称为方法的重写。

1、覆盖父类的方法

在子类中定义一个跟父类同名的方法,会调用子类重写的方法。

 

2、在父类的方法后增加新的内容

  • 第一种:父类.方法名(self)

  • 第二种:super().方法名() (常用) 

python中super是一种特殊的类,super()是使用super类创建出来的对象,可以去调用父类中的方法。

3、类的新式写法

  • 类的三种写法

class 类名:

class 类名():

class 类名(object):      ——>(新式写法)

以上三种写法并无区别,推荐使用新式写法,其中object是python中为所有对象提供的基类,里面提供了一些内置的属性和方法。 



三、面向对象的多态

多态特征一个对象具有多种形态, 在不同的使用环境中以不同的形态展示其功能, 那么我们就称该对象具有多态特征。     

  • 多态发生在具有继承关系的基础之上。
  • 多态不关注对象的类型,只关注对象具有的行为
  • 不同的子类对象,调用相同的父类方法,就会有不同的结果。

例如:“+”号,不同的对象使用,就会有不同的结果

1、第一种多态展示

2、第二种多态展示

定义统一接线口,一个接口,多种实现



四、静态方法和类方法

1、静态方法

  • 使用装饰器:@staticmethod

定义格式

 class 类名:           

                @staticmethod           

                 def 方法名(形参):                 

                        方法体

调用格式:         

类名.方法名(实参)         

对象名.方法名(实参)

2、类方法

类方法:针对类对象定义的方法

注意!!!类方法内部可以直接访问类属性,或者调用其他类方法。

定义格式

class 类名:           

        @classmethod           

        def 方法名(形参):                 

                方法体

调用格式:         

类名.方法名(实参)         

对象名.方法名(实参)  不常用

  • 例1:在实例方法中访问类属性

  • 例2:在类方法中访问类属性

在类方法中访问不了实例属性,会报错

3、总结 

  • 实例方法:方法内部访问实例属性,方法内部可以通过类名、类属性名来访问类属性
  • 静态方法:方法内部不需要访问实例属性和类属性
  • 类方法:方法内部只需要访问类属性

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
交通工具可以作为一个父,派生出汽车、自行车等子。这些子可以继承交通工具的属性和方法,并且可以根据自身特点进行重写或者扩展。这就是面向对象编程中的继承多态。 下面是一个简的示例代码: ```python class Vehicle: def __init__(self, name, speed): self.name = name self.speed = speed def run(self): print(f"{self.name} is running at a speed of {self.speed} km/h.") class Car(Vehicle): def __init__(self, name, speed, brand): super().__init__(name, speed) self.brand = brand def run(self): print(f"{self.brand} {self.name} is running at a speed of {self.speed} km/h.") class Bicycle(Vehicle): def __init__(self, name, speed, type): super().__init__(name, speed) self.type = type def run(self): print(f"{self.type} {self.name} is running at a speed of {self.speed} km/h.") car = Car("SUV", 120, "BMW") car.run() # 输出:BMW SUV is running at a speed of 120 km/h. bicycle = Bicycle("Mountain Bike", 30, "Off-road") bicycle.run() # 输出:Off-road Mountain Bike is running at a speed of 30 km/h. ``` 在上面的代码中,我们定义了一个交通工具`Vehicle`,并且派生出了汽车`Car`和自行车`Bicycle`。这两个子继承了父`Vehicle`的属性和方法,并且根据自身特点进行了重写或者扩展。在实例化子对象后,我们可以调用它们的`run()`方法,这里展示了多态的特性,即不同的子对象调用同一个方法,会有不同的输出结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街 三 仔

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值