Python类多重继承方式

 更新时间:2023年11月10日 17:14:32   作者:小廖同志_  
这篇文章主要介绍了Python类多重继承方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Python类多重继承

在 Python中有6种标准数据类型,分别为:

  • Number(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Sets(集合)
  • Dict(字典)

而根据内存中的内容是否可变,分为可变类型与不可变类型

其中,数字、字符串、元组和集合被称为不可变类型,列表和字典称为可变类型

1. 不可变类型子类化

假定我们需要处理大量的浮点数,将浮点数四舍五入后得到最后的结果。

这时我们可以定义这样一个类,用来进行这个操作。

例如:

class RoundFloat(float):  
    def __new__(cls, val):  
        return float.__new__(cls,round(val,1))  
print(RoundFloat(2.6557))  

结果为:

2.7

在这个类里面,通过调用父类的构造器来创建对象,然后实例化float、RoundFloat

这里我们仅仅是从一种类型中派生而来,我们可以使用super()内建函数去捕获对应的父类,然后调用父类的__new__()方法进行实例化。

例如:

class RoundFloat(float):  
    def __new__(cls, val):  
        return super(RoundFloat,cls).__new__(cls,round(val,1))  
print(RoundFloat(2.6557))  

结果为:

2.7

2. 可变类型子类化

子类化一个可变类型与子类化不可变类型很类似,但是我们可能不需要使用__new__()或者是__init__(),因为一般情况下我们定义的类所继承到的类型的默认行为就足够我们用了。

例如:

class SortedKeyDict(dict):  
    def keys(self):  
        return sorted(super( SortedKeyDict, self).keys())  
d = SortedKeyDict((('zhangsan', 1), ('lisi', 2),('wangwu', 3)))  
print("By iterator:".ljust(12), [key for key in d])  
print("By keys():".ljust(12), d.keys())  

结果为:

By iterator: ['zhangsan', 'lisi', 'wangwu']  
By keys():   ['lisi', 'wangwu', 'zhangsan']  

3. 多重继承

在 Python 中,多重继承就是允许子类继承多个父类,子类可以调用多个父类的方法和属性。

但是,当多个父类拥有相同方法名的方法时,我们通过方法名调用父类方法就有一定的顺序。

例如:

class A(object):  
    def test(self):  
        print("this is A.test()")  
class B(object):  
    def test(self):  
        print("this is B.test()")  
    def check(self):  
        print("this is B.check()")  
class C(A,B):  
    pass  
class D(A,B):  
    def check(self):  
        print("this is D.check()")  
class E(C,D):  
    pass

在这个例子中,类C继承自类A和类B,类D继承自类A和类B,类E继承自类C和类D。

在我们调用E.test()时,在类A和类B中都存在这个方法。

但是由于在多重继承中遵循广度优先的方式,所以程序最先搜索类E,然后再搜索类C和类D。

如果还没找到,再到类A中查找。若类A中存在这个方法,则调用这个方法,若在类A中也没有找到,则再到类B中查找。

调用E.test()结果为:

this is A.test()  

如果调用E.check()方法,那么先到类E中查找,然后在类C中查找,再到类D中查找。

在类D中找到这个方法,调用这个方法。

调用E.check()的结果为:

this is D.check()  

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • python logging 重复写日志问题解决办法详解

    python logging 重复写日志问题解决办法详解

    这篇文章主要介绍了python logging 重复写日志问题解决办法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Python可视化神器pyecharts之绘制地理图表练习

    Python可视化神器pyecharts之绘制地理图表练习

    这篇文章主要介绍了Python可视化神器pyecharts之绘制地理图表,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • 用python统计代码行的示例(包括空行和注释)

    用python统计代码行的示例(包括空行和注释)

    今天小编就为大家分享一篇用python统计代码行的示例(包括空行和注释),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python获取指定名字的程序的文件路径的两种方法

    python获取指定名字的程序的文件路径的两种方法

    本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-09-09
  • Python数据类型之Dict字典实例详解

    Python数据类型之Dict字典实例详解

    这篇文章主要介绍了Python数据类型之Dict字典,结合具体实例形式详细分析了Python字典的概念、原理、定义、元素添加、删除、遍历等相关操作技巧,需要的朋友可以参考下
    2019-05-05
  • python配置grpc环境

    python配置grpc环境

    gRPC 是一款高性能、开源的 RPC 框架,产自 Google,基于 ProtoBuf 序列化协议进行开发,支持多种语言(Golang、Python、Java等),本篇只介绍 Python 的 gRPC 安装使用
    2019-01-01
  • Django Web开发中django-debug-toolbar的配置以及使用

    Django Web开发中django-debug-toolbar的配置以及使用

    正在发愁怎么调试Django,就遇到了Django Debug Toolbar这个利器。下面这篇文章主要给大家介绍了关于django web开发中django-debug-toolbar的配置以及使用的相关资料,文中通过图文及示例代码介绍的非常详细,需要的朋友可以参考下
    2018-05-05
  • Python成功解决读文件出现:IOError: [Errno 0] Error的错误

    Python成功解决读文件出现:IOError: [Errno 0] Error的错误

    在Python编程中,处理文件是常见的任务之一,但偶尔也会遇到各种错误,包括IOError,尽管Python 3.x中IOError已被OSError和FileNotFoundError等更具体的异常所取代,由于[Errno 0]不直接指向具体的错误类型,我们将讨论一系列可能导致IOError的常见情况,需要的朋友可以参考下
    2024-07-07
  • python变量不能以数字打头详解

    python变量不能以数字打头详解

    下面小编就为大家带来一篇python变量不能以数字打头详解。小编觉得挺不错的,现在就分享给大家。也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • Python使用PyFiglet实现终端输出炫酷的ASCII艺术字效果

    Python使用PyFiglet实现终端输出炫酷的ASCII艺术字效果

    PyFiglet是一个基于Python的纯文本到ASCII艺术字转换工具,它实现了FIGlet的完整功能,本文给大家介绍了Python如何使用PyFiglet实现终端输出炫酷的ASCII艺术字效果,需要的朋友可以参考下
    2025-12-12

最新评论