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

news2024/10/11 18:40:07

引言

python小程序之继承

文章目录

  • 引言
  • 一、继承
    • 1.1 概念
      • 1.1.1 基本语法
      • 1.1.2 关键点解释
      • 1.1.3 示例
      • 1.1.4 总结
    • 1.2 题目
    • 1.3 代码
    • 1.4 代码解释
      • 1.4.1 类定义
      • 1.4.2 对象创建与方法调用
      • 1.4.3 总结
  • 二、思考

一、继承

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 没有添加或重写任何方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2205480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何防止webpack打包被逆向?

webpack打包后的js代码,看起来很混乱,似乎源码得到了保护? 不然,因为webpack只是将多个文件合并到了一起,并没有多少保护代码的功能。 比如下面这个例子,该网站的js文件是经webpack打包编译后生成的&…

TextView把其它控件挤出屏幕的处理办法

1.如果TextView后面的控件是紧挨着TextView的&#xff0c;可以给TextView添加maxWidth限制其最大长度 上有问题的布局代码 <?xml version"1.0" encoding"utf-8"?> <layout xmlns:android"http://schemas.android.com/apk/res/android&qu…

动态爬虫管理平台构建与实现(论文+源码)_kaic

摘 要 随着互联网的迅速发展&#xff0c;Web的信息量越来越大。人们往往通过搜索引擎去从互联网上搜索想要的信息&#xff0c;比如:百度&#xff0c;谷歌&#xff0c;搜狗等。这类搜索引擎称之为通用搜索引擎&#xff0c;其为所有的用户所需的内容&#xff0c;但目前互联网上的…

【网络原理】TCP协议提高效率的秘密-滑动窗口机制

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;计算机网络那些事 如果我们严格依照“确认应答”机制&#xff0c;针对每一个发送的数据段&#xff0c;都需要一个ACK确认应答&#xff0c;当收到ACK应答报文后&#xff0c;才继续发下一个报文。这样…

2025届计算机保研经验贴(末九→浙江大学软件学院)

燕园再美美不过宁波港&#xff0c;没到过浙软的人不会明了 软微已死&#xff0c;浙软当立&#xff01; 文章目录 一、个人情况二、保研历程1、去年今日2、前期准备3、夏令营天大智算软件所西交软本校浙江大学软件学院 4、预推免 三、后记链式反应9.28下午冥场面9.29博弈 浙软当…

ClickHouse 24.9 版本发布说明

本文字数&#xff1a;7295&#xff1b;估计阅读时间&#xff1a;19 分钟 作者&#xff1a;ClickHouse Team 本文在公众号【ClickHouseInc】首发 又到新版本发布的时间了&#xff01; 发布概要 本次ClickHouse 24.9 版本包含了23个新功能&#x1f381;、14项性能优化&#x1f6f…

[已解决] HttpMessageNotReadableException: JSON parse error: Unexpected character

[已解决] HttpMessageNotReadableException: JSON parse error: Unexpected character 文章目录 写在前面问题描述报错原因分析&#xff1a; 解决思路解决办法1. 检查并修复客户端的 JSON 数据格式2. 确认请求头的 Content-Type 设置正确3. 捕获并处理 HttpMessageNotReadableE…

三层b+树估算存储多少行数据

文章目录 B树结构图示估算方法(这里要以聚簇索引来看) B树结构图示 估算方法(这里要以聚簇索引来看) 非叶子节点数* 每个叶子结点记录总数 假设mysql 数据页&#xff0c;16kb&#xff0c;刚好对应B树的一个节点 每个叶子结点记录数&#xff0c; 叶子结点存储的是对应的原始数据…

项目常用版本控制管理工具

不仅仅是代码管理工具 gitHubgitcodeSVN gitHub https://github.com/ github gitcode https://gitcode.com/ gitcode SVN 图片: 带尺寸的图片: 居中的图片: 居中并且带尺寸的图片:

git--git reset

HEAD 单独一个HEAD eg:git diff HEAD 表示当前结点。 HEAD~ HEAD~只处理当前分支。 注意&#xff1a;master分支的上一个结点是tmp分支的所在的结点fc11b74, 79f109e才是master的第二个父节点。 HEAD~ 当前结点的父节点。 HEAD~1 当前结点的父节点。 HEAD~n 当前结点索…

Python 工具库每日推荐 【easyocr】

文章目录 引言Python OCR 工具库的重要性今日推荐:EasyOCR 工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:多语言名片信息提取案例分析高级特性自定义模型训练处理倾斜文本扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScript…

Qt实现侧边栏功能

本文介绍Qt实现侧边栏功能。 采用Qt进行界面应用程序开发时&#xff0c;经常遇到侧边栏功能实现&#xff0c;采用侧边栏可以将一些暂时不用到的功能隐藏&#xff0c;使用的时候点击一下相应的按钮即可弹出&#xff08;动画方式&#xff09;功能菜单。减少主界面控件数量&#…

JS | JS中类的 prototype 属性和__proto__属性

大多数浏览器的 ES5 实现之中&#xff0c;每一个对象都有__proto__属性&#xff0c;指向对应的构造函数的prototype属性。Class 作为构造函数的语法糖&#xff0c;同时有prototype属性和__proto__属性&#xff0c;因此同时存在两条继承链。 构造函数的子类有prototype属性。‌ …

搭建知识库:助力大健康零售电商的快速发展

一、大健康零售电商行业的快速发展及其对知识库的需求 随着互联网技术的飞速发展和人们对健康意识的显著提升&#xff0c;大健康零售电商行业迎来了前所未有的发展机遇。这一行业不仅涵盖了传统零售业的商品销售&#xff0c;还融入了健康管理、健康咨询、健康数据分析等多元化…

『网络游戏』数据库表格转储【25】

避免勿删数据库表格&#xff0c;可以将表格存储 放到桌面即可 现在将表格删除后点击 浏览桌面表格保存即可 修改客户端脚本&#xff1a;NetSvc.cs 目的是在数据库更新异常时弹出提示以便修改 本章结束

使用 Helsinki-NLP 中英文翻译本地部署 - python 实现

通过 Helsinki-NLP 本地部署中英文翻译功能。该开源模型性价比相对高&#xff0c;资源占用少&#xff0c;对于翻译要求不高的应用场景可以使用&#xff0c;比如单词&#xff0c;简单句式的中英文翻译。 该示例使用的模型下载地址&#xff1a;【免费】Helsinki-NLP中英文翻译本…

Pura 70系列和Pocket 2已支持升级尝鲜鸿蒙NEXT,报名教程在这里

相信不少关注鸿蒙 NEXT 的人都知道&#xff0c;10月8日起&#xff0c;华为开启了鸿蒙 NEXT 系统的公测&#xff0c;但有不少人不知道的是&#xff0c;除了公测的 Mate 60 和 Mate X5 两个系列的机型&#xff0c;还有两个系列的手机其实也可以提前升级体验鸿蒙 NEXT 系统。 Pur…

随时随地一键开播的云微客实景直播神器,你想要吗?

AI实景直播系统正在以自动化、智能化的特性&#xff0c;逐渐成为直播行业的新宠。在众人频繁使用手机的时代背景下&#xff0c;直播已经成为了大多数人娱乐的方式之一&#xff0c;然而传统的直播方式不仅操作繁琐而且人员成本也高&#xff1b;现在云微客实景直播不仅可以告别人…

在工业现场,数据采集相关的对象一般有哪些类型?

在工业现场&#xff0c;数据采集相关的对象一般有以下类型&#xff1a;一、设备运行参数类1.温度 —描述&#xff1a;反映设备的发热情况、工作环境温度等&#xff0c;对于一些对温度敏感的设备&#xff08;如电子设备、精密机械等&#xff09;至关重要。 —举例&#xff1a;在…

企业注册资金如何实缴?步骤与方式详解

在企业的发展过程中&#xff0c;注册资金实缴是一个重要的环节。它不仅体现了企业的实力和信誉&#xff0c;也为企业的经营活动提供了坚实的资金保障。那么&#xff0c;在 2024 年&#xff0c;企业注册资金实缴的步骤和方式有哪些呢&#xff1f; 一、企业注册资金实缴步骤 1、确…