您现在的位置是:网站首页> 编程资料编程资料
Python中类的mro与继承关系详解_python_
2023-05-26
421人已围观
简介 Python中类的mro与继承关系详解_python_
前言
版本:
- windows 10.0
- python 3.8
类
在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内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
相关内容
- Python数据分析numpy数组的3种创建方式_python_
- Python实现yaml与json文件批量互转_python_
- Python pip超详细教程之pip的安装与使用_python_
- 利用Seaborn绘制20个精美的pairplot图_python_
- Python处理时间戳和时间计算等的脚本分享_python_
- Python Flask中Cookie和Session区别详解_python_
- Python使用Flask Migrate模块迁移数据库_python_
- Python制作简易版2048小游戏_python_
- Python flask使用ajax上传文件的示例代码_python_
- 以SortedList为例详解Python的defaultdict对象使用自定义类型的方法_python_
