首页 > 编程语言 >python 类的继承

python 类的继承

时间:2023-04-30 17:23:47浏览次数:43  
标签:__ python self 继承 test class def

Python中的类继承可以分为以下几种类型:

  1. 单继承:一个子类只继承一个父类。

  2. 多继承:一个子类同时继承多个父类。

  3. 深度优先继承:在多继承中,如果有多个父类具有相同的方法或属性,则会按照从左到右、深度优先的顺序查找并使用第一个符合要求的父类的方法或属性。

  4. 方法重写:一个子类可以重写其父类中的方法,从而改变该方法的实现方式。

  5. 抽象基类:一个抽象基类定义了一组接口,任何继承该类的子类都必须实现这些接口。通过使用抽象基类,可以在编码时规范程序的结构和行为。

下面举例说明单继承和多继承的使用方法:

# 单继承
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        print(f"{self.name} is speaking.")

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed

    def speak(self):
        print(f"{self.name} ({self.breed}) is barking.")

dog = Dog("Fido", "Golden Retriever")
dog.speak()  # 输出:Fido (Golden Retriever) is barking.


# 多继承
class Flyer:
    def fly(self):
        print("I can fly.")

class Swimmer:
    def swim(self):
        print("I can swim.")

class Duck(Flyer, Swimmer):
    def quack(self):
        print("Quack!")

duck = Duck()
duck.fly()   # 输出:I can fly.
duck.swim()  # 输出:I can swim.
duck.quack() # 输出:Quack!

在上面的例子中,Animal是一个父类,Dog是Animal的子类,Duck同时继承了Flyer和Swimmer两个父类,因此它既能飞也能游泳。注意,在Dog子类中使用了super()函数来调用父类的构造函数,并且重写了speak()方法以实现不同的行为;在Duck子类中,没有重写任何方法,但是它可以直接使用Flyer和Swimmer两个父类中定义的方法。

对于深度优先继承,我们可以通过修改继承顺序来改变方法或属性的查找顺序。例如:

# 深度优先继承
class A:
    def test(self):
        print("A")

class B(A):
    def test(self):
        print("B")
        super().test()

class C(A):
    def test(self):
        print("C")
        super().test()

class D(B, C):
    def test(self):
        print("D")
        super().test()

d = D()
d.test()  # 输出:D B C A

在上述例子中,类D继承了类B和类C,并重写了test方法。当调用d.test()时,程序会按照B -> C -> A的顺序查找并调用test方法。其中,在调用super().test()时,程序会继续按照类继承顺序向上查找并调用父类的test方法。

对于方法重写,我们可以在子类中重新定义同名的方法,并使用super()函数调用父类中的该方法。例如

# 方法重写
class Shape:
    def area(self):
        pass

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

class Square(Rectangle):
    def __init__(self, side):
        super().__init__(side, side)

square = Square(5)
print(square.area())  # 输出:25

在上述例子中,Square子类重新定义了area方法,并使用super()函数调用了父类Rectangle中的该方法。由于Square继承了Rectangle,因此它也具有计算面积的能力,但是实现方式略有不同。

最后,抽象基类可以使用Python内置的abc模块来实现。例如:

# 抽象基类
import abc

class Shape(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def area(self):
        pass

class Rectangle(Shape):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

class Square(Rectangle):
    def __init__(self, side):
        super().__init__(side, side)

square = Square(5)
print(square.area())  # 输出:25

上述例子中,我们使用了abc模块来定义一个抽象基类Shape,并声明了一个名为area的抽象方法。任何继承自Shape的子类都必须实现area方法,否则会抛出TypeError异常。在Rectangle和Square两个子类中,我们都实现了area方法,因此它们可以正常地计算面积。

 

标签:__,python,self,继承,test,class,def
From: https://www.cnblogs.com/yund/p/17365460.html

相关文章

  • python基础语法
    变量和数据类型#变量名可以由字母、数字、下划线组成,但不能以数字开头name='Lucy'age=18is_student=Truescore=95.5变量:用于存储数据或者引用对象的标识符。数据类型:Python中有多种数据类型,如字符串(str)、整数(int)、布尔值(bool)、浮点数(float)等。控制流语句......
  • python 数据类型
    Python3中有以下常用的数据类型:整型(int):表示整数,例如1、2、3等等。浮点型(float):表示浮点数或实数,例如3.14、0.1等等。字符串型(str):表示文本或字符序列,例如"Hello,world!"。布尔型(bool):表示真或假,只有两个取值True和False。列表型(list):表示可变有序序列,可以包含......
  • python 类与对象
    类和对象的基本概念类:类是一种模板或者蓝图,用于描述一类对象所具有的属性和方法。类定义了对象的基本结构,包括属性和方法。对象:对象是类的一个实例,是具体实现某个类的一个具体实体。每个对象都有自己的属性和方法。类和对象的应用在Python中,可以通过定义类来创建对象,并......
  • python3 环境搭建
    安装Python3:从官网https://www.python.org/downloads/下载符合您操作系统的Python3版本,并按照安装向导完成安装。配置环境变量:将Python3的安装路径添加到系统PATH环境变量中。在Windows系统中,可以右键点击“此电脑”,选择“属性”->“高级系统设置”->“环境变量”,在系......
  • Gradio: 使用Python构建机器学习网页应用
    Gradio:用Python构建机器学习网页APPGradio是一个开源的Python库,用于构建演示机器学习或数据科学,以及web应用程序。使用Gradio,您可以基于您的机器学习模型或数据科学工作流快速创建一个漂亮的用户界面,让用户可以”尝试“拖放他们自己的图像、粘贴文本、录制他们自己的声音,并通......
  • python requests模块
    requests是Python中用于发送HTTP请求的常用第三方库,可以方便地实现多种请求方式(如GET、POST、PUT、DELETE等),以及文件上传、Cookies管理等功能。以下是requests模块的使用方法和注意事项:安装requests:使用pip命令安装requests库,命令为"pipinstallrequests"。......
  • 2 第2章 Python语言基础、IPython及Jupyter notebook
    IPython基础运行IPython:在终端输入ipython运行Jupyternotebook:在终端输入jupyternotebookShift+Enter来执行命令当在命令行输人表达式时,按下Tab键即可为任意变量(对象、函数等)搜索命名空间;当输入任意路径(甚至是Python字符串)时,按下Tab键将补全你的计算机文件系统文件名;......
  • [oeasy]python0144_try的完全体_否则_else_最终_finally
    try的完全体回忆上次内容上次细化了主控程序(main.py)导入(get_fruits.py)处理(process.py)输出(output.py)使用了try结构tryexcept发现异常就报错输入部分的错误应该在输入部分来报具体怎么报呢?......
  • Python中django的ORM和SQLalchemy简单对比(一)
    1.ORM对象关系映射(英语:ObjectRelationMapping,简称ORM,或O/RM,或O/Rmapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。一般的ORM包括以下四部分:一个对持久类对象......
  • [oeasy]python0144_try的完全体_否则_else_最终_finally
    try的完全体回忆上次内容 上次细化了主控程序(main.py)导入(get_fruits.py)处理(process.py)输出(output.py) 使用了try结构tryexcept发现异常就报错 输入部分的错误应该在输入部分来报 具体怎么报呢?......