python对象的多重继承

python多重继承 在我们教程的前一章中,我们已经介绍了继承,或者更具体的“单一继承”。正如我们所见,在这种情况下,一个类从一个类继承。另一方面,多重继承是一种特性,其中一个类可以从多个父类继承属性和方法。批评者指出,在钻石问题等情况下,多重继承伴随着高度的复杂性和模糊性。我们将在本章后面解决这个问题。 多重继承是“危险的”或“坏的”的普遍偏见主要是由多继承机制实现不佳的编程语言,尤其是对它的不当使用所滋生的。Java 甚至不支持多重继承,而 C++ 支持它。Python 有一种复杂且设计良好的多重继承方法。 一个类定义, 阅读详情

一个从多个父类继承过来的子类,可以访问所有父类的功能。并不推荐使用。

多重继承最简单有用的形式是mixin。假设在之前Contact类增加一个功能,允许给self.email发送一封邮件。

class ContactList(list):
    def search(self, name):
        '''Return all contacts that contain the search value
           in their name.'''
        matching_contacts = []
        for contact in self:
            if name in contact.name:
                matching_contacts.append(contact)
        return matching_contacts

class Contact:
    all_contacts = ContactList()
  
    def __init__(self, name, email):
        self.name = name
        self.email = email
        Contact.all_contacts.append(self)

class MailSender:
    def send_mail(self, message):
        print("Sending mail to " + self.email)
        # 这里添加发送邮件逻辑
		# Python小白学习交流群:711312441
class EmailableContact(Contact, MailSender):
    pass

EmailableContact这个类不做任何特别的事(实际上,它仅仅是起到一个独立的类的作用),但是通过多重继承,他允许我们定义一个新的类,这个类既是Contact又是MailSender。

多重继承的语法就像定义里的参数列表,括号里可以包含两个(或者更多的)基类而不是一个,这些基类使用逗号分隔开。

执行如下:

>>> e = EmailableContact("John Smith", "jsmith@example.net")
>>> Contact.all_contacts
[<__main__.EmailableContact object at 0x10ae49128>]
>>> [c.name for c in Contact.all_contacts]
['John Smith']
>>> e.send_mail("Hello, test e-mail here")
Sending mail to jsmith@example.net

Contact类的初始化函数仍然会把一个新的联系人添加到all_contacts这个列表。并且可以发送给件给self.email。

当混合不同类的方法时,多重继承可以很好的工作,但是,当我们要调用超类的方法时,这将会变得非常混乱。因为这里有多个父类,你怎么知道调用哪个呢?如何知道调用他们的顺序呢?

Python 类多重继承的初始化问题 [super().__init__()方法的调用问题 ] 本文探讨了Python类的多重继承中,父类初始化方法 __init__() 的调用问题。 阅读详情

相关推荐

33.Python面向对象高级编程 多重继承 详解

继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能

妖怪的博客 243

Python 入门之类的继承(三)

@R星校长 第3关:从标准类派生 在 Python 中有6种标准数据类型,分别为:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Sets(集合)和Dict(字典)。而根据内存中的内容是否可变,分为可变类型与不可变类型。其中,数字、字符串、元组和集合被称为不可变类型,列表和字典称为可变类型。 对标准类型的子类化是一个很重要的知识点,本关的任务就是要让学习者掌握标准类型子类化的方法。 不可变类型子类化 假定我们需要处理大量的浮点数,将浮点数四舍五入后得到最后的结果。这时我.

qq_44745905的博客 1633

Python之多重继承

在子类中,如果想要获得父类的方法时,我们可以通过super()来做。super()代表父类的定义,不是父类对象。super(子类名称,self).__init__(参数列表)class A:print("A的构造方法")​​super(B,self).__init__() #调用父类的构造方法print("B的构造方法")#A.say(self) 调用父类的say方法super().say() #通过super()调用父类的方法​b = B()b.say()say AAA。

Calor13的博客 3810

Python多重继承

前面介绍的大部分的继承都是单继承,既一个子类只有一个父类,但是Python也支持多重继承,既一个子类可以有多个父类。多继承有许多复杂的问题,大部分的面向对象语言都仅仅支持单继承,Python是为数不多支持多继承的语言,本文对此展开学习。

2600

当windows安装git时出现以下错误提示

Windows安装Git时出现多个系统配置设置失败错误(exit code 4294967295),提示包括无法设置textconv、LFS过滤器和SSL等配置项。关键问题在于scalar.exe版本不兼容,系统提示"该版本的scalar.exe与你运行的Windows版本不兼容"。解决方案是检查程序版本是否正确,下载与Windows系统兼容的正确版本重新安装即可。

沧澜的博客 1876

用Multisim仿真石英晶体振荡电路:从等效模型到频响曲线实战

本文通过Multisim软件,从构建石英晶体等效电路模型入手,详细演示了如何仿真分析其电抗频率特性曲线,并实战搭建与调试皮尔斯振荡电路。文章深入探讨了振荡必须工作在串联与并联谐振点之间感性区的原因,为电子设计者提供了从理论到仿真的完整可视化学习路径。

ik67890123的博客 504

python中多重继承与获取对象

1、python中多重继承 除了从一个父类继承外,Python允许从多个父类继承,称为多重继承。 多重继承的继承链就不是一棵树了,它像这样: class A(object): def __init__(self, a): print 'init A...' self.a = a class B(A): def __i...

aa150602的博客 154

保姆级教程:用高云GW2A开发板搭建RISC-V软核处理器(含DDR3内存优化配置)

本文提供了一份详细的保姆级教程,指导开发者使用高云GW2A-LV18PG256C8 FPGA开发板搭建RISC-V软核处理器系统。教程涵盖了从开发环境搭建、PicoRV32软核集成,到关键的DDR3内存控制器配置与优化,并深入讲解了时序约束与系统调试方法,帮助初学者和爱好者实现从逻辑设计到软硬件协同的深度实践。

2a4s6d8f0g的博客 570

python多重继承例子_python中多重继承与获取对象

1、python中多重继承除了从一个父类继承外,Python允许从多个父类继承,称为多重继承。多重继承的继承链就不是一棵树了,它像这样:classA(object):def __init__(self, a):print 'init A...'self.a=aclassB(A):def __init__(self, a):super(B, self).__init__(a)print 'init ...

weixin_39612849的博客 266

安卓 实现灯光闪过效果

有个小需求,给按钮加一个灯光划过的效果,这样的需求一般有UI,肯定就找UI了要个gif图不就完事了,可是这次没有,好久自己做一个嘛。Web端的大佬实现很快,到安卓这边呢,百度一搜发现诶?怎么没有,好吧自己来一个 一切动效相关的不给图看都是耍流氓 所以俺不能这么干啊,OK!直接上效果图,再来解释下怎么实现的 效果就是这样子,怎么实现呢? 从图分析下,就是一个光写着重左边移动要右边循环嘛,这有啥难的?? 来看一看我的第一版,第二版 这是个什么?????一点都不像啊? 赶紧再问了问Web端大佬,噢,加了一个

SummerCloudXT的博客 1382

❤️爆肝十二万字《python从零到精通教程》,从零教你变大佬❤️(建议收藏)

文章目录强烈推荐系列教程,建议学起来!!一.pycharm下载安装二.python下载安装三.pycharm上配置python四.配置镜像源让你下载嗖嗖的快4.1pycharm内部配置4.2手动添加镜像源4.3永久配置镜像源五.插件安装(比如汉化?)5.1自动补码神器第一款5.2汉化pycharm5.3其它插件六.美女背景七.自定义脚本开头八、这个前言一定要看九、python入门十、python缩进十一、Python注释1.单行注释2.多行注释十二、Python 变量1.变量定义理解2. 变量名命名3. 分

全栈川川 26万+

Python 面向对象高级编程-多重继承

继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能。回忆一下Animal如果按照哺乳动物和鸟类归类,我们可以设计出这样的类的层次:但是如果按照“能跑”和“能飞”来归类,我们就应该设计出这样的类的层次:这么一来,类的层次就复杂了:如果要再增加“宠物类”和“非宠物类”,这么搞下去,类的数量会呈指数增长,很明显这样设计是不行的。

分享编程知识与技巧 致力于技术交流与学习 找我合作私聊 有偿解决计算机问题 1145

IPGUARD客户端与应用程序冲突

客户端与应用程序冲突 症状 安装客户端之后,客户端的某些程序无法运行或使用过程中出现异常,卸载客户端后恢复正常。 原因分析 可能是客户端的某些功能与应用程序发生冲突导致。 解决方法 当出现这样的情况时,可以按照以下步骤确认。 步骤1:屏蔽主动注入 在客户端配置策略中,增加配置策略hookapi_disinj,值为1;待策略同步到客户端后,重启客户端确认问题是否解决。如果解决,则转到...

IP-Guard专栏 1411

Python面向对象高级编程——多重继承

多重继承 继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能。 回忆一下Animal类层次的设计,假设我们要实现以下4种动物: Dog - 狗狗; Bat - 蝙蝠; Parrot - 鹦鹉; Ostrich - 鸵鸟。 如果按照哺乳动物和鸟类归类,我们可以设计出这样的类的层次: 但是如果按照“能跑”和“能飞”来归类,我们就应该设计出这样的类的层次: 如果要把上面的...

taxuewuhenxiaoer 251

如何解决群晖Docker注册表查询失败/无法拉取镜像等问题

如何解决群晖Docker注册表查询失败/无法拉取镜像等问题

XiaoqiangClub的博客 1万+

2026工控高薪:C#上位机面试15题(含答案)

基础岗(10-15K):考察串口/Modbus/PLC通信基础;资深岗(20-30K):考察工业级优化(抗干扰/断线重连)、物联网(MQTT)、跨协议整合;架构岗(30K+):考察上位机架构设计、边缘计算、项目落地避坑。我整理了2026年近20场高薪岗位(月薪20K+)的面试高频题,筛选出15道核心题,每题标注“考察点+实战答案”——答案拒绝纯理论,全部结合车间现场、PLC通信、物联网落地等真实场景,帮你避开“背答案但不落地”的面试坑。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1286

Python 面向对象 继承 多重继承 类 类对象 实例对象 绑定

继承 Python面向对象编程一大特点是继承,继承是通过类定义形成的: class DerivedClassName(BaseClassName): pass 完成了子类关于父类的继承,继承有许多特点: DerivedClassName 为子类,BaseClassName 为父类,子类可以继承父类的任何属性与方法 如果子类中定义了与父类同名的属性或者方法,则在子类中自动覆盖父类的的属性...

今晚看星星的博客 457

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

python多参数多重继承_python对象的多重继承

一个从多个父类继承过来的子类,可以访问所有父类的功能。并不推荐使用。多重继承最简单有用的形式是mixin。假设在之前Contact类增加一个功能,允许给self.email发送一封邮件。classContactList(list):defsearch(self, name):'''Return all contacts that contain the search valuein their n...

weixin_39857876的博客 432

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

多重继承_从零开始学Python-Day45-面向对象高级编程-多重继承

继承是面向对象编程的一个重要特点,通过继承,子类其实是扩展了父类。Animal这个父类下,假设我们要实现以下4种动物:Dog – 狗狗;Bat – 蝙蝠;Parrot – 鹦鹉;Ostrich – 鸵鸟。如果按照哺乳动物和鸟类归类,可以设计出这样的类的层次:如果按照“能跑”和“能飞”来归类:如果要把上面的两种分类都包含进来,我们就得设计更多的层次:哺乳类:能跑的哺乳类,能飞的哺乳类;鸟类:能跑的鸟...

weixin_39884144的博客 94

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

(5)Python-面向对象继承,方法重写,多重继承,多态,特殊方法

面向对象的3大特征:封装,继承,多态 创建类时,如果省略了父类,默认父类为Object Object是所有类的父亲,所有类都继承自object class person: … issubclass() 方法是检查一个类是否是另外一个类的子类 print(issubclass(animal,dog)) //true print(issubclass(dog,animal)) //false 方法的重...

魚 321

python 面向对象高级编程之多重继承

python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 多重继承 继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能。 回忆一下Animal类层次的设计,假设我们要实现以下4种动物: Dog - 狗狗; Bat - 蝙蝠; Parrot - 鹦鹉; Ostrich - 鸵鸟。 如果按照哺乳动物和鸟类归类,我们可以设计出这样的类的层次: 但是如果按照“能跑”和...

记录从移动端、鸿蒙到物联网与AI的完整实战与思考。专注于分享可复用的工程方案与产品思维,尤其深入鸿蒙生态与全栈开发。以十年工程与管理沉淀,为你提供清晰的技术纵深路径。坚信技术的价值在于“贯通”与“落地”。 322

python是否支持多重继承_python对象的多重继承

一个从多个父类继承过来的子类,可以访问所有父类的功能。并不推荐使用。多重继承最简单有用的形式是mixin。假设在之前Contact类增加一个功能,允许给self.email发送一封邮件。classContactList(list):defsearch(self, name):'''Return all contacts that contain the search valuein their n...

weixin_39739234的博客 232

Python中的多重继承:高级面向对象编程的深度探讨

在面向对象编程中,继承是一种重要的机制,它允许子类继承父类的属性和方法,从而实现代码的重用和扩展。Python中的继承机制非常灵活,支持单继承和多重继承,其中多重继承允许一个类继承自多个父类。本文将深入探讨Python中多重继承的原理、使用方法和最佳实践,帮助开发者更好地理解和运用这一特性。

Trb601012的博客 1226

python-对象、私有属性_方法、继承(多重继承)、重写

对象#!/usr/bin/python #coding:utf-8class Dog: weight = 5 age = 1.5 def __init__(self): self.weight = 1 self.name = "gou" def run(self): self.weight = 4#构造对象 xiaoGou

全干工程师 2012

python3自学笔记10-面向对象进阶-多重继承、枚举类、元类

多重继承 Python允许使用多重继承,MixIn就是一种常见的设计。 在设计类的继承关系时,通常,主线都是单一继承下来的,如果需要“混入”额外的功能,通过多重继承就可以实现,这种设计通常称之为MixIn。 MixIn的目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个MixIn的功能,而不是设计多层次的复杂的继承关系。 枚举类 Python提供了Enum类来实...

陶罐的程序世界 511
上一篇: python 中的os.path.split()函数用法
下一篇: Python继承扩展内置类
Python热爱者
博客等级 码龄7年 3057粉丝 1330原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值