首页 > 编程语言 >【python实操】python小程序之继承

【python实操】python小程序之继承

时间:2024-10-10 13:49:39浏览次数:3  
标签:python self dog value 继承 实操 Animal 方法 eat

引言

python小程序之继承

文章目录

一、继承

1.1 概念

python 中的继承是一种强大的机制,它允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。通过继承,子类可以重用父类的代码,并且可以在不改变原有代码的情况下扩展功能

1.1.1 基本语法

class ParentClass:  # 父类
    def __init__(self, value):
        self.value = value

    def method(self):
        print(f"Parent method, value: {self.value}")

class ChildClass(ParentClass):  # 子类继承了ParentClass
    def __init__(self, value, extra_value):
        super().__init__(value)  # 调用父类构造函数
        self.extra_value = extra_value

    def method(self):
        print(f"Child method, value: {self.value}, extra_value: {self.extra_value}")

# 创建对象
parent = ParentClass(10)
child = ChildClass(20, 30)

# 调用方法
parent.method()  # 输出: Parent method, value: 10
child.method()   # 输出: Child method, value: 20, extra_value: 30

1.1.2 关键点解释

  1. 定义父类:

    • ParentClass 是一个简单的类,有一个构造函数 __init__ 和一个方法 method
  2. 定义子类:

    • ChildClass 继承自 ParentClass,在括号中指定父类
    • ChildClass 的构造函数中,使用 super() 调用父类的构造函数来初始化父类的属性
    • ChildClass 可以添加自己的属性(如 extra_value)和方法,也可以重写(覆盖)父类的方法
  3. 调用父类方法:

    • 使用 super() 函数可以调用父类的方法。这有助于保持代码的一致性和可维护性
  4. 方法覆盖:

    • 子类可以重写(覆盖)父类的方法,提供不同的实现。例如,ChildClass 重写了 method 方法
  5. 多重继承:

    • Python 支持多重继承,即一个类可以从多个父类继承。例如:
      class A:
          def method(self):
              print("Method from A")
      
      class B:
          def method(self):
              print("Method from B")
      
      class C(A, B):
          pass
      
      c = C()
      c.method()  # 输出: Method from A
      
    • 多重继承时,方法解析顺序(MRO)决定了哪个父类的方法会被优先调用。可以通过 __mro__ 属性查看 MRO
  6. 抽象基类 (ABC):

    • 使用 abc 模块可以创建抽象基类,其中包含未实现的方法(抽象方法)。子类必须实现这些抽象方法才能被实例化
      from abc import ABC, abstractmethod
      
      class Animal(ABC):
          @abstractmethod
          def speak(self):
              pass
      
      class Dog(Animal):
          def speak(self):
              print("Woof!")
      
      dog = Dog()
      dog.speak()  # 输出: Woof!
      
  7. 访问控制:

    • Python 没有严格的访问控制关键字(如 public, private, protected),但可以通过命名约定来模拟这种行为
      • 公有属性和方法:没有任何前缀
      • 私有属性和方法:使用双下划线前缀 __
      • 受保护属性和方法:使用单下划线前缀 _

1.1.3 示例

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

    def speak(self):
        raise NotImplementedError("Subclasses must implement this method")

class Dog(Animal):
    def speak(self):
        return f"{self.name} says Woof!"

class Cat(Animal):
    def speak(self):
        return f"{self.name} says Meow!"

# 创建对象
dog = Dog("Buddy")
cat = Cat("Whiskers")

# 调用方法
print(dog.speak())  # 输出: Buddy says Woof!
print(cat.speak())  # 输出: Whiskers says Meow!

在这个例子中,Animal 类是一个抽象基类,因为它包含了一个未实现的方法 speakDogCat 类继承自 Animal 并实现了 speak 方法

1.1.4 总结

通过继承,可以构建出层次清晰、易于维护和扩展的代码结构

1.2 题目

  1. 定义一个 动物类,吃
  2. 定义一个 狗类, 继承动物类,吃,叫
  3. 定义一个 哮天犬类,继承狗类

1.3 代码

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

    def eat(self):
        print(f'{self.name}动物要吃东西')


class Dog(Animal):
    def eat(self):
        print(f'{self.name}狗要吃东西')
        super().eat()

    def bark(self):
        print(f'{self.name}狗要汪汪汪')


class Xtdog(Dog):
    pass


red_dog = Animal('小红')
red_dog.eat()
print('-'*30)
black_dog = Dog('小黑')
black_dog.eat()
black_dog.bark()
print('-'*30)
white_dog = Xtdog('小白')
white_dog.eat()
white_dog.bark()

输出结果:
在这里插入图片描述

1.4 代码解释

这段代码定义了一个简单的类层次结构,展示了 python 中的继承和方法重写

1.4.1 类定义

  1. Animal:

    • __init__(self, name): 构造函数,初始化 name 属性
    • eat(self): 方法,打印一条消息,表示动物要吃东西
  2. Dog:

    • 继承自 Animal
    • eat(self): 重写 Animal 类的 eat 方法。首先打印一条特定于狗的消息,然后调用父类的 eat 方法
    • bark(self): 新增的方法,打印一条消息,表示狗要汪汪汪
  3. Xtdog:

    • 继承自 Dog 类,但没有添加或重写任何方法

1.4.2 对象创建与方法调用

  1. 创建 Animal 对象 red_dog:

    red_dog = Animal('小红')
    red_dog.eat()
    
    • 创建一个 Animal 类的实例 red_dog,名字为 ‘小红’
    • 调用 eat 方法,输出:小红动物要吃东西
  2. 创建 Dog 对象 black_dog:

    black_dog = Dog('小黑')
    black_dog.eat()
    black_dog.bark()
    
    • 创建一个 Dog 类的实例 black_dog,名字为 ‘小黑’
    • 调用 eat 方法,输出:
      • 小黑狗要吃东西
      • 小黑动物要吃东西(通过 super().eat() 调用 Animal 类的 eat 方法)
    • 调用 bark 方法,输出:小黑狗要汪汪汪
  3. 创建 Xtdog 对象 white_dog:

    white_dog = Xtdog('小白')
    white_dog.eat()
    white_dog.bark()
    
    • 创建一个 Xtdog 类的实例 white_dog,名字为 ‘小白’
    • 调用 eat 方法,输出:
      • 小白狗要吃东西
      • 小白动物要吃东西(通过 super().eat() 调用 Animal 类的 eat 方法)
    • 调用 bark 方法,输出:小白狗要汪汪汪

1.4.3 总结

通过这个例子,可以看到如何使用继承来扩展类的功能,并且如何在子类中重写父类的方法

二、思考

  • red_dogAnimal 类的实例,只调用了 eat 方法
  • black_dogDog 类的实例,重写(覆盖+拓展)了 eat 方法,并新增了 bark 方法
  • white_dogXtdog 类的实例,继承了 Dog 类的所有属性和方法,因为 Xtdog 没有添加或重写任何方法

标签:python,self,dog,value,继承,实操,Animal,方法,eat
From: https://blog.csdn.net/m0_49243785/article/details/142799821

相关文章

  • <Project-8.1 pdf2tx-MM> Python Flask 用浏览器翻译PDF内容 2个翻译引擎 繁简中文结果
    更新ProjectName:pdf2tx(P6)Date:5oct.24Function:在浏览器中翻译PDF文件Code:https://blog.csdn.net/davenian/article/details/142723144升级ProjectName:pdf2tx-mm(P8)7oct.24 加入多线程,分页OCR识别,提高性能与速度使用googletranslator, AzureAPI做......
  • PTA 作业三 继承与多态 JAVA 6-1 从抽象类shape类扩展出一个圆形类Circle 面向对象程
    6-1从抽象类shape类扩展出一个圆形类Circle分数25作者 张德慧单位 西安邮电大学请从下列的抽象类shape类扩展出一个圆形类Circle,这个类圆形的半径radius作为私有成员,类中应包含初始化半径的构造方法。publicabstractclassshape{//抽象类publicabstractdoubleg......
  • PTA 作业三 继承与多态 JAVA 面向对象程序设计7-1 周长计算器-1分数 30作者 Ma 单位
    7-1周长计算器-1分数30作者 Ma单位 山东科技大学1、定义一个接口Shape用于表示图形,其包含一个doublelength()的方法用于求周长。2、定义三角形类Triangle、长方形类Rectangle、圆形类Circle分别实现接口Shape3、定义测试类ShapeTest并使用Shape接口定义变......
  • 【Python脚本】getopt参数解析笔记
    getopt参数解析笔记背景在Python中,使用getopt模块进行命令行参数解析是常见的需求。在编写脚本时,正确地定义参数选项对于确保程序正常运行至关重要。这是一个用于检测安卓软件版本的脚本一部分,有些用法和笔记分享给大家问题描述在某个脚本中,使用getopt解析命令......
  • [Python手撕]第 k 个缺失的正整数
    给你一个严格升序排列的正整数数组arr和一个整数k。请你找到这个数组里第k个缺失的正整数。示例1:输入:arr=[2,3,4,7,11],k=5输出:9解释:缺失的正整数包括[1,5,6,8,9,10,12,13,...]。第5个缺失的正整数为9。示例2:输入:arr=[1,2,3,4],k=2输出:6解释:缺......
  • 基于Python后端构建多种不同的系统终端界面研究
    在我们一般开发系统的时候,往往会根据实际需要做出各种不同的系统终端界面,如基于BS的,CS、APP、小程序等等,一般都是基于一个统一接入的WebAPI后端,本篇系统探寻对基于Python后端构建多种不同的系统终端界面研究,介绍一些基于Python后端开发的不同终端界面。1、Python系统终端界面我......
  • 最新毕设-Python-旅游数据分析与可视化系统-48196(免费领项目)可做计算机毕业设计JAVA、
    基于python的旅游数据分析与可视化系统的设计与实现摘 要本文旨在设计和实现一个基于Python的旅游数据分析可视化系统。该系统以旅游数据为研究对象,利用Python的数据处理能力和可视化技术,对旅游数据进行深入分析,并通过直观的可视化图表展示分析结果。本文首先介绍了旅游数......
  • python程序停到这个地方 client_socket, address = server_socket.accept()
    停到这个地方 client_socket,address=server_socket.accept() 这行代码是在等待客户端的连接请求。server_socket.accept()是一个阻塞调用,它会一直等待有客户端连接上来,然后返回一个新的套接字对象client_socket和客户端的地址address。如果你的程序在这一行停止,可能......
  • 用Python类实现装饰器
    用Python类实现装饰器为什么使用类实现装饰器?类装饰器的实现增加状态的类装饰器带参数的类装饰器为什么使用类实现装饰器?在某些情况下,我们可能希望装饰器保存状态、初始化一些参数,或者通过对象的方法操作。这时,用类实现装饰器会显得更为灵活和合理。类装饰器允许我们......
  • 深入理解 Python 中的 object
    深入理解Python中的object什么是object()?object()的作用和特点object是所有类的基类基础且不可变的对象object提供基本的对象行为object()作为占位符为什么要了解object?什么是object()?object()是Python的一个内置函数,它用于创建一个最基础的对象实例。......