首页 > 其他分享 >Chapter 28 继承

Chapter 28 继承

时间:2024-08-07 19:24:52浏览次数:16  
标签:Chapter 继承 self 28 call print 5g 父类 成员

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能!

文章目录


前言

在面向对象编程中,继承是一个重要的概念,它允许我们创建新的类(子类),以获得现有类(父类)的特性和行为。本文详细讲解了Python 中的继承特性,介绍了如何通过继承来有效地扩展和复用代码。


本篇文章参考:黑马程序员

一、基础语法

在Python中,继承(Inheritance)是一种面向对象编程(OOP)的特性,它允许一个类(子类或派生类)从另一个类(父类或基类)获取属性和方法。

①定义
从父类那里继承(复制)成员变量和成员方法(不含私有)

②类型

  • 单继承:一个类继承另一个类
  • 多继承:一个类继承多个类,按照顺序从左向右依次继承

③基本语法

class 类(父类1,父类2,……,父类N) :
  类内容体

【注意】
子类构建的类对象

  • 可拥有自己的成员变量和成员方法
  • 可使用父类的成员变量和成员方法

单继承:

# 单继承
class Phone:
    IMEI=None   # 手机序列号
    producer="HA"   # 厂商

    def call_by_4g(self):
        print("4g通话")

class Phone2024(Phone):
    face_id="10001"   # 面部识别ID

    def call_by_5g(self):
        print("2024年新功能:5g通话")

phone=Phone2024()
print(phone.producer)
phone.call_by_4g()
phone.call_by_5g()

输出结果:
HA
4g通话
2024年新功能:5g通话

多继承:

class Phone:
    IMEI=None   # 手机序列号
    producer="HA"   # 厂商

    def call_by_4g(self):
        print("4g通话")

class NFCReader:
    nfc_type="第五代"
    producer="BE"

    def read_card(self):
        print("NFC读卡")

    def write_card(self):
        print("NFC写卡")

class RemoteControl:
    rc_type="红外遥控"

    def control(self):
        print("红外遥控开启")

class MyPhone(Phone,NFCReader,RemoteControl):
    pass

phone=MyPhone()
phone.call_by_4g()
phone.read_card()
phone.write_card()
phone.control()
print(phone.producer)   # 输出为“HA”,如果父类有同名的方法或属性,先继承的优先级高于后继承

输出结果:
4g通话
NFC读卡
NFC写卡
红外遥控开启
HA

【注意】
多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级,先继承的优先级高于后继承。

④pass关键字
定义:
在 Python 中,pass是一个特殊的关键字,表示无内容,空的意思。

作用:

  • 占位符:
    定义一个类或函数但暂时不想添加任何代码时,可使用 pass 来占位。
  • 保持结构完整:
    在 Python 中,类和函数的定义必须有内容。如果去掉pass而没有其他任何内容,则会引发IndentationError: expected an indented block语法错误。
class Phone:
    IMEI=None   # 手机序列号
    producer="HA"   # 厂商

    def call_by_4g(self):
        print("4g通话")

class NFCReader:
    nfc_type="第五代"
    producer="BE"

    def read_card(self):
        print("NFC读卡")

    def write_card(self):
        print("NFC写卡")

class RemoteControl:
    rc_type="红外遥控"

    def control(self):
        print("红外遥控开启")

class MyPhone(Phone,NFCReader,RemoteControl):
    pass

【分析】
这段代码中MyPhone类继承了 Phone、NFCReader 和 RemoteControl 这三个父类,但没有添加任何额外的属性或方法。为了保持代码的完整性,这里使用 pass 作为占位符,确保了类的定义是合法的。

二、复写

子类继承父类的成员属性和方法后,如果对某些实现不满意,可以通过复写在子类中重新定义同名的属性或方法。

复写:在子类中重新定义父类的方法。

# 定义父类
class Phone:
    IMEI=None   # 手机序列号
    producer="HA"   # 厂商

    def call_by_5g(self):
        print("使用5g进行通话")

# 定义子类,复写父类的成员
class MyPhone(Phone):
    # 复写父类的成员属性
    producer = "BE"

    # 复写父类的成员方法
    def call_by_5g(self):
        print("开启CPU单核模式,确保通话的时候省电")
        print("使用5g进行通话")
        print("关闭CPU单核模式,确保性能")

phone=MyPhone()
phone.call_by_5g()
print(phone.producer)

输出结果:
开启CPU单核模式,确保通话的时候省电
使用5g进行通话
关闭CPU单核模式,确保性能
BE

一旦在子类中复写了父类的成员,当类对象调用该成员时,将会调用复写后的新实现。如果需要访问被复写的父类成员,则需要使用特殊的调用方式。

方式一:直接通过父类的名称访问其成员

调用成员变量:父类名.成员变量
调用成员方法:父类名.成员方法(self)

【注意】
直接通过父类的名称访问其成员需要显式传递self,该方式适合简单的继承结构。

# 定义父类
class Phone:
    IMEI=None   # 手机序列号
    producer="HA"   # 厂商

    def call_by_5g(self):
        print("使用5g进行通话")

# 定义子类,复写父类的成员
class MyPhone(Phone):
    # 复写父类的成员属性
    producer = "BE"

    # 复写父类的成员方法
    def call_by_5g(self):
        print("开启CPU单核模式,确保通话的时候省电")
        # 方式一:通过父类名直接调用它的成员
        print(f"父类的厂商是:{Phone.producer}")
        Phone.call_by_5g(self)
        print("关闭CPU单核模式,确保性能")

phone=MyPhone()
phone.call_by_5g()

输出结果:
开启CPU单核模式,确保通话的时候省电
父类的厂商是:HA
使用5g进行通话
关闭CPU单核模式,确保性能

方式二:使用super()方法访问父类的成员

调用成员变量:super().成员变量
调用成员方法:super().成员方法()

【注意】
使用super()时,无需显式传递self,因为super()在调用时会自动获取当前实例的上下文,该方式适合多重继承结构。

# 定义父类
class Phone:
    IMEI=None   # 手机序列号
    producer="HA"   # 厂商

    def call_by_5g(self):
        print("使用5g进行通话")

# 定义子类,复写父类的成员
class MyPhone(Phone):
    # 复写父类的成员属性
    producer = "BE"

    # 复写父类的成员方法
    def call_by_5g(self):
        print("开启CPU单核模式,确保通话的时候省电")
        # 方式二:
        print(f"父类的厂商是:{super().producer}")
        super().call_by_5g()
        print("关闭CPU单核模式,确保性能")

phone=MyPhone()
phone.call_by_5g()

输出结果:
开启CPU单核模式,确保通话的时候省电
父类的厂商是:HA
使用5g进行通话
关闭CPU单核模式,确保性能

【注意】
只能在子类内部直接调用父类的同名成员,子类的实例对象默认调用的是子类中复写后的成员。

标签:Chapter,继承,self,28,call,print,5g,父类,成员
From: https://blog.csdn.net/2302_80253507/article/details/140933059

相关文章

  • 错误 C1128 节数超过对象文件格式限制: 请使用 /bigobj 进行编译
    错误C1128表示生成的对象文件(通常是.obj文件)中包含的节数超过了链接器的限制。这通常发生在项目包含大量代码或使用了大量模板时。解决方法是在编译时使用/bigobj选项。这个选项允许对象文件包含更多的节,从而避免这个错误。在VisualStudio中,可以通过以下几种方式......
  • 泛微OA移动端在公网IP变更和无法打开Install.do界面下修改插件库地址(122,128报错)
    事情起因因为公司搬迁,公网IP变更,服务器搬迁时未提前调整好泛微oa服务器的IP,但是旧地址仍留有主路由可以使用。发现问题移动端无法正常连接,/install.do的界面也无法打开,无法进入修改插件库服务器IP的页面联系了技术,技术表示/install.do无法打开的话也无能为力(因为公司维护费断......
  • C++进阶:1_C++中的继承
    C++中的继承一.继承的概念及定义1.继承的概念公共部分提取出来叫做:父类或者基类(正常类)继承父类的类叫做:子类或者派生类(派生类)继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产......
  • impdp/expdp报错: ORA-39064: 无法写入日志文件 ORA-29285: 文件写入错误
    问题现象Windows服务器导入/导出Oracle11g数据库出现如下报错提示,输出的日志文件从报错位置往后不再输出。ORA-39064:无法写入日志文件ORA-29285:文件写入错误问题原因原因是客户端环境变量NLS_LANG与数据库字符集不一致,而数据泵在写日志文件的时候使用的是————数据......
  • [翻译] RFC 1928: SOCKS 协议第 5 版
    https://luyuhuang.tech/2020/08/27/rfc1928.html文档声明本文档为互联网社区规范了一个互联网标准跟踪的协议,并征求讨论和改进建议.请参阅当前版本的“互联网官方协议标准(STD1)”以获取此协议的标准化的状态.本文档的发布不受限制.致谢本文描述的协议是其之前版本(......
  • C语言典型例题28
    《C程序设计教程(第四版)——谭浩强》习题2.5输入一个华氏温度,要求输出摄氏温度。公式为C=5/9(F-32),要求输出要有文字说明,取两位小数数学知识:(1)华氏温度与摄氏温度(FahrenheittemperatureandCelsiustemperature),是两大国际主流的计量温度的标准。(2)华氏温标由来华氏温标:......
  • 最新雪王 type__1286 参数逆向分析,K哥带你免费喝一杯~
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作......
  • 智能加速计算卡设计原理图:628-基于VU3P的双路100G光纤加速计算卡 XCVU3P板卡
    基于VU3P的双路100G光纤加速计算卡  一、板卡概述     基于XilinxUltraScale+16nmVU3P芯片方案基础上研发的一款双口100GFPGA光纤以太网PCI-Expressv3.0x16智能加速计算卡,该智能卡拥有高吞吐量、低延时的网络处理能力以及辅助CPU进行网络功能......
  • K8S云原生-高可用集群部署V1.28.2
    一、环境准备K8S集群角色IP主机名安装相关组件master10.1.16.160hqiotmaster07lapiserver、controller-manager、scheduler、kubelet、etcd、docker、kube-proxy、keepalived、nginx、calicomaster10.1.16.161hqiotmaster08lapiserver、controller-manager、sc......
  • Java 继承和多态(进阶介绍 十六)
    目录Java继承IS-A关系实例实例instanceof关键字HAS-A关系例子Java多态简单的例子虚方法多态的实现方式方式一:重写方式二:接口Java继承继承是所有OOP语言和Java语言不可缺少的组成部分。继承是Java面向对象编程技术的一块基石,是面向对象的三大特征......