返回顶部
首页 > 资讯 > 后端开发 > Python >Python中类的mro与继承关系详解
  • 687
分享到

Python中类的mro与继承关系详解

2024-04-02 19:04:59 687人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言类继承mro总结前言 版本: windows 10.0python 3.8 类 在Python数字比较与类结构中有简略提到类,那么什么是类呢? 在python中定义一个类很简

前言

版本:

Python数字比较与类结构中有简略提到类,那么什么是类呢?

在python中定义一个类很简单,使用关键字class就能实现。

class Animal:
    pass

如何使用它,在类结构中称作实例化。

animal = Animal()

这样,就有了一个Animal的实例。

继承

类的其中一个特性就是能够继承,把Animal类丰富下,将其作为基类:

class Animal:
    property_ = '能够思考'

    def __init__(self, name, age, value):
        self.name_ = name
        self.age_ = age
        self.val_ = val

在这里面,property_作为类属性,无需实例化就能使用,而__init__下的self.name_, self.age_和self.val_需要在实例化后才能使用,且这里__init__需要传入参数,其中self用来指代类本身,不作为传参值。

print(Animal.property_)  # 输出:能够思考
print(Animal.name_)   # 引发AttributeError错误

a = Animal('阿黑', 12, 70)
print(a.property_)  # 能够思考
print(a.name_)  # 阿黑
print(a.age_)  # 12
print(a.val_)  # 70
复制代码

Animal类可以正常使用,再写一个Monkey类,继承Animal类。

class Monkey(Animal):
    pass

Monkey后面调用Animal类,继承了其属性及方法,也可通过实例化,查看Monkey实例的属性。

print(Monkey.property_)  # 类属性: 能够思考

m = Monkey('阿黄', 15, 40)
print(m.name_)  # 阿黄
print(m.age_)  # 15
print(m.val_)  # 40

当然也能继承类,对其已有的方法进行改写,这里再定义一个Cat类。

class Cat(Animal):

    def __init__(self, name, age):
        self.name_ = '我是' + name
        self.age_ = age

Cat类继承后对__init__进行了改写,修改了name_,并且删除了val_。

print(Cat.property_)  # 类属性:能够思考

c = Cat('小花', 6)
print(c.name_)  # 我是小花
print(c.age_)  # 6
print(c.val_)  # 引发AttributeError报错

对于类属性还是能使用,不见的val_再调用就会引发报错。

除此之外,如果想在保留基类的属性基础上增加属性,可以用super()进行处理:

class Fish(Animal):

    def __init__(self, name, age, val, env):
        super().__init__(name, age, val)
        self.env_ = env

在实例化Fish类时,需要多传入一个生活环境env参数:

f = Fish('小鲤', 2, 57, '水里')
print(f.env_)  # 水里

mro

mro的含义为方法解析顺序,在类的继承中,明白解析顺序是尤为重要的,对于上述几个类可以简单看下mro的顺序情况。

Animal.mro()
# [__main__.Animal, object]

Monkey.mro()
# [__main__.Monkey, __main__.Animal, object]

Cat.mro()
# [__main__.Cat, __main__.Animal, object]

Fish.mro()
# [__main__.Fish, __main__.Animal, object]

mro的解析顺序是从左至右,越在左边优先级越高,可以看到最先解析的是当前类本身,再是继承的上一个类,最后是原生object类。上述罗列的所有类,继承关系都很简单,mro的顺序也简单明了。

总结

到此这篇关于Python中类的mro与继承关系详解的文章就介绍到这了,更多相关Python mro内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python中类的mro与继承关系详解

本文链接: https://lsjlt.com/news/119693.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python中类的mro与继承关系详解
    目录前言类继承mro总结前言 版本: windows 10.0python 3.8 类 在Python数字比较与类结构中有简略提到类,那么什么是类呢? 在python中定义一个类很简...
    99+
    2024-04-02
  • Python中类的mro与继承关系详解(二)
    目录前言多重继承思考片刻总结前言 版本: windows 10.0python 3.8 多重继承 在Python数字比较与类结构中有简略提到类,且在Python中类的mro与继承关系...
    99+
    2024-04-02
  • python子类在多继承中怎么使用MRO
    本篇内容主要讲解“python子类在多继承中怎么使用MRO”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python子类在多继承中怎么使用MRO”吧!子类在多继承中使用MRO机制在Python中...
    99+
    2023-07-05
  • C3 线性化算法与 MRO之Python中的多继承
    目录什么是 MRONew-style Class vs. Old-style Class理解 old-style class 的 MRO理解 new-style class 的 MR...
    99+
    2024-04-02
  • python子类在多继承中使用MRO机制原理
    目录子类在多继承中使用MRO机制算法原理查看MRO列表子类在多继承中使用MRO机制 在Python中,当定义一个类时,可以指定它的父类。一个子类继承了其所有父类的属性和方法,并且可...
    99+
    2023-03-24
    python子类多继承MRO python子类多继承MRO
  • C#中的类继承详解
    目录前言类的继承注意事项寄语总结前言 在日常的程序编码工作中,我们的最终目标是完成公司交给自己的开发任务,核心目标是写出好代码。 那么什么是好代码? 高内聚,低耦合 想必从事编码工作...
    99+
    2024-04-02
  • python类的继承实例详解
    python 类的继承 对于许多文章讲解python类的继承,大多数都是说一些什么oop,多态等概念,我认为这样可能对有一定基础的开发者帮助不是那么大,不如直接用在各种情况下所写的代码,来展示对于某一种代码...
    99+
    2022-06-04
    详解 实例 python
  • Python 类的继承实例详解
    Python 类的继承详解 Python既然是面向对象的,当然支持类的继承,Python实现类的继承比JavaScript简单。 Parent类: class Parent: parentAt...
    99+
    2022-06-04
    详解 实例 Python
  • JavaScript 中的继承:了解类关系的本质
    ...
    99+
    2024-04-02
  • 详解C++中单继承与多继承的使用
    目录前言1.继承的概念和定义(1)继承的概念(2)继承的定义方法(2)继承后子类的成员类型2.基类与派生类的赋值转换(1)派生类赋值给基类(2)基类给派生类3.继承中的作用域(1)隐...
    99+
    2024-04-02
  • 详解Java语言中的抽象类与继承
    目录一、实验目的二、实验要求三、实验报告要求四、实验小结一、实验目的 1、掌握抽象类的设计; 2、掌握抽象方法方法的实现; 3、熟悉类的向下向上转型,以及子类实例化父类对象的基本要求...
    99+
    2022-11-13
    Java抽象类 继承 Java抽象类 Java 继承
  • Java 继承的继承体系:揭示超类和子类之间的关系
    Java 继承是一种面向对象编程特性,允许一个类(子类)继承另一个类(超类)的属性和方法。这为代码重用和多态性提供了强大的机制。 超类和子类关系 超类:也称为父类或基类,是提供属性和方法的原始类。 子类:也称为派生类或后代类,从超类继承...
    99+
    2024-03-12
    Java 继承体系
  • python的继承详解
    目录1、单继承:子类只继承一个父类2、多继承:子类继承多个父类3、子类重写父类的同名属性和方法4、子类调用父类同名属性和方法5、 6、调用父类方法super()总结1、单继...
    99+
    2024-04-02
  • C++ 函数继承详解:如何使用 RTTI 来检查类型继承关系?
    rtti 是一种机制,允许您在运行时检查类型的继承关系。使用 rtti,您可以获取有关对象的类型信息,这对于验证继承关系非常有用。要检查继承关系,请使用 typeid 运算符获取对象的类...
    99+
    2024-05-03
    c++ 函数继承
  • c++中的继承关系
    1 什么是继承 继承概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称...
    99+
    2024-04-02
  • Python类的继承与多态详细介绍
    目录概念类的创建类的继承多态的使用概念 类(Class): 用来描述具有相同的属性和方法的对象的集合。 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类...
    99+
    2024-04-02
  • C++ 函数继承详解:如何理解继承中的“is-a”和“has-a”关系?
    C++ 函数继承详解:掌握“is-a”和“has-a”关系 什么是函数继承? 函数继承是 C++ 中一种将派生类中定义的方法与基类中定义的方法关联起来的技术。它允许派生类访问和重写基类...
    99+
    2024-05-02
    c++ 继承
  • PHP中类继承关系的示例分析
    这篇文章将为大家详细讲解有关PHP中类继承关系的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在PHP中,我时常会写一个类,类写了一个共用方法,然后让子类去继承就...
    99+
    2024-04-02
  • Js类的构建与继承案例详解
    JS里类的定义和继承实在五花八门,所以单独开一个笔记本记录。 定义 派生于Object的方式 1.new Object:在创建对象后动态定义属性、方法 var Car = new...
    99+
    2024-04-02
  • Python类中的单继承和多继承用法
    本篇内容主要讲解“Python类中的单继承和多继承用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python类中的单继承和多继承用法”吧!前言Python面向对象编程语言,有List、Str...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作