首页 > 编程语言 >Python篇——继承及多重继承

Python篇——继承及多重继承

时间:2024-07-15 13:41:52浏览次数:15  
标签:多重 name 继承 子类 self 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)等)来实现多重继承的功能,而无需使用多重继承。这些替代方法通常更简单、更易于理解,并且更符合单一职责原则。

标签:多重,name,继承,子类,self,Python,父类,类中
From: https://www.cnblogs.com/wyy-25/p/18229272

相关文章

  • Python篇——私有属性
    1私有属性的特点Python类中的私有属性是一种实现封装的方式,用于限制对某些属性的直接访问。以下是关于Python类中私有属性的主要特点:1.1命名约定使用双下划线(__)前缀来创建私有属性,例如‘ __private_attr’1.2名称改写(NameMangling)Python会自动将双下划线开头的属......
  • 面试算法(排序)附带c++/python实现
            排序算法是面试中会经常会被问到的一类问题,如果可以掌握较多的排序算法,在面试过程中才更有机会被面试官看重哦,下面我们准备了一些常见的面试算法,并分别给出了c++和python的代码实现,小伙伴们一起学起来吧!冒泡排序(BubbleSort)        基于交换的排序,......
  • python 面试宝典
    50道必备的Python面试题(建议点赞)-阿里云开发者社区(aliyun.com) ▍2、为什么Python执行速度慢,我们如何改进它?Python代码执行缓慢的原因,是因为它是一种解释型语言。它的代码在运行时进行解释,而不是编译为本地语言。为了提高Python代码的速度,我们可以使用CPython、Numba,或......
  • 基于小波分析的糖尿病视网膜病变检测(Python)
    fromscipyimportmiscfromPILimportImagefromskimageimportexposurefromsklearnimportsvmimportscipyfrommathimportsqrt,pifromnumpyimportexpfrommatplotlibimportpyplotaspltimportnumpyasnpimportglobimportmatplotlib.pyplotas......
  • 简单的小波分析入门教程(第一部分,Python)
    importnumpyasnpimportmatplotlib.pyplotaspltimportpywtSimpleSignalAnalysisusingDWT#Generatethesignalt=np.linspace(0,1,1000,endpoint=False)signal=np.cos(2.0*np.pi*7*t)+np.sin(2.0*np.pi*13*t)#ApplyDWTcoeffs=p......
  • Python数据库应用
      通过文件操作可以实现简单的数据操作功能,如果要处理的数据量巨大,则需要将数据存储在数据库中。Python支持多种数据库。  本章主要介绍数据库概念以及结构化数据库查询语言SQL,分析并理解Python自带的轻量级关系数据库SQLlite的使用方法(同样用于MySQL数据库)  文......
  • 基于风光储能和需求响应的微电网日前经济调度(Python代码实现)
    目录0引言1计及风光储能和需求响应的微电网日前经济调度模型1.1风光储能需求响应都不参与的模型1.2风光参与的模型1.3风光和储能参与模型1.4风光和需求响应参与模型1.5风光储能和需求响应都参与模型 2需求侧响应评价2.1 负载率2.2可再生能源消纳率2.3用户......
  • 基于风光储能和需求响应的微电网日前经济调度(Python代码实现)
    目录0引言1计及风光储能和需求响应的微电网日前经济调度模型1.1风光储能需求响应都不参与的模型1.2风光参与的模型1.3风光和储能参与模型1.4风光和需求响应参与模型1.5风光储能和需求响应都参与模型 2需求侧响应评价2.1 负载率2.2可再生能源消纳率2.3用户......
  • Python酷库之旅-第三方库Pandas(023)
    目录一、用法精讲58、pandas.isnull函数58-1、语法58-2、参数58-3、功能58-4、返回值58-5、说明58-6、用法58-6-1、数据准备58-6-2、代码示例58-6-3、结果输出59、pandas.notna函数59-1、语法59-2、参数59-3、功能59-4、返回值59-5、说明59-6、用法59-6-1、......
  • Java中的类继承与多态
    Java中的类继承与多态大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!类继承与多态的基础概念在Java编程中,类继承和多态是面向对象编程中的核心概念之一。类继承允许一个类(子类)基于另一个类(父类)来构建,并且可以继承父类的属性和方法。多态性则使得同一个......