python 类 子类 初始化 super
类的初始化方法
在写python代码时候,总能看到初始化__init__
的定义,但其实
初始化方法__init__
是可选。
class A:def __init__(self, x):self.x = x
可以看到类A
具有的属性有属性变量x
a = A(4)
a.x # 输出4
子类但初始化方法
如果子类没有新的构造参数,或者新的初始化逻辑,那么没有必要创建初始化__init__
方法。因为按照搜索顺序,解释器会找到基类的初始化方法并执行。
基于此,我们需要在子类的初始化方法中显式调用基类方法。
- 不显式调用
class A:def __init__(self, x):self.x = xclass B(A):def __init__(self, x, y):self.y = yb = B(1, 2)
b.y # 输出2
b.x # 报错
当使用b.x
调用基类的初始化方法时候就报错:
---------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-4-628a1ebb8ea7> in <module>
----> 1 b.xAttributeError: 'B' object has no attribute 'x'
可以看到此处是表明B类并没有属性x,这表明在B类初始化后,基类的初始化不被继承来,因此需要显式的调用, 使用super函数。
class C(A):def __init__(self, x, y):super().__init__(x) # 显式调用基类self.y = yc = C(1, 2)
c.x
c.y
注:
super() 函数是用于调用父类(超类)的一个方法。
super() 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。
参考
- super()
- python 学习笔记
python 类 子类 初始化 super相关推荐
- python类属性初始化_Python类定义、属性、初始化和析构
类的定义,属性和方法概念 方法中self的作用和意义 初始化( __init__ ) 和 析构方法( __del__ ) 类的定义 class 类名 实例 实例名 = 类名() 一个"实例& ...
- python类的继承super方法_Python类的继承super相关原理解析
看了网上许多关于super.mro.C3的介绍感觉没有一份很容易初学者理解的文档,直接看C3算法的话,比较难理解,也没必要,如果掌握一套规律的话,会轻松许多.我将网上这些博主的文章进行一个梳理总结,最 ...
- Python类继承及super()函数
文章目录 Python中单类继承 普通类方法继承 初始化函数继承 Python中多类继承 Python中单类继承 Python是一门面向对象的编程语言,支持类继承.新的类称为子类(Subclass), ...
- python类子类调用父类方法总结
先说下,有3种方法,如下 class Animal():def __init__(self, age):self.age=ageclass Cat(Animal):def __init__(self, ...
- python类属性初始化_Python:如何模拟类属性初始化函数
这里实际发生的是当你实际导入模块时,fn()已经执行了.因此,在您已经评估了存储在类属性中的方法之后,模拟就会出现. 因此,当您尝试模拟方法时,您尝试进行的测试为时已晚. 如果只是在方法中添加prin ...
- python类的初始化方法_python学习之-对象的的初始化与__init__方法
class OldboyStudent: # name='xxxx' # 相似的特征: school = 'oldboy' # 相似的技能 def choose_course(self): print ...
- python类的初始化方法___python类的初始化方法
我相信前段时间我也遇到过类似的问题,不确定我的解决方案是最佳实践,但它确实实现了我的目标,即为每个用户创建一个datetime变量,得到调查的开始时间,我只需要在Get方法(survey start) ...
- python 类继承 父类初始化_python之子类继承父类时进行初始化的一些问题
直接看代码: classPerson:def __init__(self): self.name= "jack" classStudent(Person):def __init__ ...
- python类初始化详解_python类中super() 的使用解析
描述 super() 函数是用于调用父类(超类)的一个方法. super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO).重复 ...
最新文章
- 如何使用 Python 或 Bash动态生成 Jekyll 配置文件
- 第十七讲 利用傅里叶级数求特解
- Python 一行代码搞定炫酷可视化,你需要了解一下 Cufflinks
- Python清屏小结
- 1.7 编程基础之字符串 27 单词翻转 4分 python
- 计算机辅助园林设计常用软件,计算机辅助园林设计应用探讨.doc
- Paradigm此前投资Uniswap的资金价值或超30亿美元
- 251f与ips屏显示器对比_8百左右预算,2020年PS平面设计/摄影后期显示器推荐/选购指南(全高清+高色域屏)...
- Web应用测试(一)Selenium介绍及环境搭建
- LINUX SHELL脚本的if语句实在是诡异
- 37、购物系统需求分析
- workflow-工作流
- STM32电机TB6612驱动
- java工程师和全栈工程师_java全栈工程师 - 北大青鸟东莞金码学校官网
- Python之OpenCV 007 《走近混沌》分形艺术Fractal之美
- 滑块验证码的解决方法
- 蚂蚁篇无聊吗?看看猎人骨灰粉丝绝妙分析(3)
- Django安全认证机制CSRF
- 抖音康辉机器人_新闻联播主持康辉玩抖音,卖萌耍宝样样精通,观众为其点赞...
- 按钮默认点击事件(打开页面时按钮默认被点击)
热门文章
- matlab iri模型,IRI2012电离层模型 matlab代码
- c语言报告对老师的致谢,论文对老师的致谢
- 42-面对对象编程(高级部分)1
- 【CVPR 2021】树状决策知识蒸馏:Tree-like Decision Distillation
- sklearn中实现多分类任务(OVR和OVO)
- 快狗打车CTO沈剑:数据库架构一致性最佳实践
- word方框内插入对勾
- redis实战第七篇 使用redis工具(redis-cli)搭建redis cluster
- eclipse、android studio快速输入System.out.println();
- windows下kafka环境完整搭建,Python调用kafka构建完整实例分析与应用