类的初始化方法

在写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相关推荐

  1. python类属性初始化_Python类定义、属性、初始化和析构

    类的定义,属性和方法概念 方法中self的作用和意义 初始化( __init__ ) 和 析构方法( __del__ ) 类的定义 class 类名 实例 实例名 = 类名() 一个"实例& ...

  2. python类的继承super方法_Python类的继承super相关原理解析

    看了网上许多关于super.mro.C3的介绍感觉没有一份很容易初学者理解的文档,直接看C3算法的话,比较难理解,也没必要,如果掌握一套规律的话,会轻松许多.我将网上这些博主的文章进行一个梳理总结,最 ...

  3. Python类继承及super()函数

    文章目录 Python中单类继承 普通类方法继承 初始化函数继承 Python中多类继承 Python中单类继承 Python是一门面向对象的编程语言,支持类继承.新的类称为子类(Subclass), ...

  4. python类子类调用父类方法总结

    先说下,有3种方法,如下 class Animal():def __init__(self, age):self.age=ageclass Cat(Animal):def __init__(self, ...

  5. python类属性初始化_Python:如何模拟类属性初始化函数

    这里实际发生的是当你实际导入模块时,fn()已经执行了.因此,在您已经评估了存储在类属性中的方法之后,模拟就会出现. 因此,当您尝试模拟方法时,您尝试进行的测试为时已晚. 如果只是在方法中添加prin ...

  6. python类的初始化方法_python学习之-对象的的初始化与__init__方法

    class OldboyStudent: # name='xxxx' # 相似的特征: school = 'oldboy' # 相似的技能 def choose_course(self): print ...

  7. python类的初始化方法___python类的初始化方法

    我相信前段时间我也遇到过类似的问题,不确定我的解决方案是最佳实践,但它确实实现了我的目标,即为每个用户创建一个datetime变量,得到调查的开始时间,我只需要在Get方法(survey start) ...

  8. python 类继承 父类初始化_python之子类继承父类时进行初始化的一些问题

    直接看代码: classPerson:def __init__(self): self.name= "jack" classStudent(Person):def __init__ ...

  9. python类初始化详解_python类中super() 的使用解析

    描述 super() 函数是用于调用父类(超类)的一个方法. super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO).重复 ...

最新文章

  1. 如何使用 Python 或 Bash动态生成 Jekyll 配置文件
  2. 第十七讲 利用傅里叶级数求特解
  3. Python 一行代码搞定炫酷可视化,你需要了解一下 Cufflinks
  4. Python清屏小结
  5. 1.7 编程基础之字符串 27 单词翻转 4分 python
  6. 计算机辅助园林设计常用软件,计算机辅助园林设计应用探讨.doc
  7. Paradigm此前投资Uniswap的资金价值或超30亿美元
  8. 251f与ips屏显示器对比_8百左右预算,2020年PS平面设计/摄影后期显示器推荐/选购指南(全高清+高色域屏)...
  9. Web应用测试(一)Selenium介绍及环境搭建
  10. LINUX SHELL脚本的if语句实在是诡异
  11. 37、购物系统需求分析
  12. workflow-工作流
  13. STM32电机TB6612驱动
  14. java工程师和全栈工程师_java全栈工程师 - 北大青鸟东莞金码学校官网
  15. Python之OpenCV 007 《走近混沌》分形艺术Fractal之美
  16. 滑块验证码的解决方法
  17. 蚂蚁篇无聊吗?看看猎人骨灰粉丝绝妙分析(3)
  18. Django安全认证机制CSRF
  19. 抖音康辉机器人_新闻联播主持康辉玩抖音,卖萌耍宝样样精通,观众为其点赞...
  20. 按钮默认点击事件(打开页面时按钮默认被点击)

热门文章

  1. matlab iri模型,IRI2012电离层模型 matlab代码
  2. c语言报告对老师的致谢,论文对老师的致谢
  3. 42-面对对象编程(高级部分)1
  4. 【CVPR 2021】树状决策知识蒸馏:Tree-like Decision Distillation
  5. sklearn中实现多分类任务(OVR和OVO)
  6. 快狗打车CTO沈剑:数据库架构一致性最佳实践
  7. word方框内插入对勾
  8. redis实战第七篇 使用redis工具(redis-cli)搭建redis cluster
  9. eclipse、android studio快速输入System.out.println();
  10. windows下kafka环境完整搭建,Python调用kafka构建完整实例分析与应用