Python篇——继承及多重继承
引言
- 为什么要用到继承呢?因为继承可以减少代码冗余以及提高代码的重用性。
1 继承
- 继承用于类的创建,继承描述类与类之间的关系
- 新创建的类是子类,被继承的类是父类
- 子类继承父类的属性和方法
1.1 场景条件——创建父类
定义Person类,有两个属性:name和age,和一个方法greet,输出:Hi,my name is...
代码实现:
class Person: def __init__(self,name,age): self.name = name self.age = age def greet(self): print("Hi,my name is {}.".format(self.name))
创建对象并调用类中构造函数:
p1 = Person("Mike",22) p1.greet()
输出:
Hi,my name is Mike.
1.2 增加场景条件——创建子类
创建Person类的子类Student,Student中增加一个属性grade,grade表示年级。
代码实现:
class Student(Person): #Student是Person类的子类 def __init__(self,name,age,grade): #调用父类的构造方法 super().__init__(name,age) #super()函数返回一个临时对象 self.grade = grade #该临时对象可以调用父类的方法 def greet(self): #覆盖父类的函数greet print("Hi,my name is {} and I'm a student in grade {}.".format(self.name,self.grade))
创建对象并调用类中构造函数:
s1 = Student("Jacob",20,3) s1.greet()
输出:
Hi,my name is Jacob and I'm a student in grade 3.
2 多重继承
2.1 实现
python还支持多重继承,就是可以同时继承多个父类的属性和方法。
在Python中,多重继承是通过在定义类时,在类名后的括号中列出多个父类来实现的。
代码实现案例:
class Base1: def f1(self): print("这是Basel类中的f1函数") class Base2: def f2(self): print("这是Base2类中的f2函数") class C(Base1,Base2): pass
创建对象并调用类中构造函数:
c = C() c.f1() #输出 这是Basel类中的f1函数 c.f2() #输出 这是Base2类中的f2函数
输出
这是Basel类中的f1函数
这是Base2类中的f2函数
2.2 多重继承的优缺点
优点:
- 代码重用:多重继承允许子类重用多个父类的代码,这有助于减少重复代码,并使代码更加模块化。
- 灵活性:多重继承提供了更大的灵活性,允许子类从多个不同的父类中获取所需的功能。
缺点:
- 复杂性:多重继承可能导致复杂的类层次结构,这可能会使代码难以理解、维护和调试。
- 菱形继承问题(钻石问题):当两个父类都从同一个类继承时,可能会导致方法解析顺序不明确,从而产生不可预见的结果。虽然Python使用C3线性化算法来解决这个问题,但在某些情况下,它仍然可能导致困惑。
- 紧耦合:多重继承可能导致类之间的紧耦合,这意味着一个类的更改可能会影响多个子类。这可能会降低代码的可维护性和可扩展性。
- 替代方案:在许多情况下,可以通过其他方法(如组合、接口、混入(Mixin)等)来实现多重继承的功能,而无需使用多重继承。这些替代方法通常更简单、更易于理解,并且更符合单一职责原则。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律