类的初始化方法

在写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 正则表达式
  2. nvm:Mac下的 node 版本管理工具
  3. ClassLoader 初步
  4. WEB安全基础-SQL注入演示
  5. VMware中的三种网络模式-----Host-only模式
  6. java 内存分配实例_java学习(四) —— 内存分配浅析
  7. js能调用c语言吗,HTML页面,测试JS对C函数的调用
  8. vs2019创建c语言,Visual Studio 2019安装、测试创建c语言项目(图文教程)
  9. 新建mfc工程后打开图形化设计界面
  10. 【数字图像处理5.3】SLIC算法 超像素分割(无监督聚类方式)python
  11. mikumikudance 5.X for Android,AR MMD(拡張現実×MikuMikuDance)
  12. Java换行输出的5种方式
  13. 互动快报读报软件绿色版 v5.061
  14. 互联网短信网关接口协议
  15. (六)python共享代码步骤
  16. NetworkX学习笔记07:泊松分布与幂律分布
  17. 详解微信小程序页面间传递信息的三种方式
  18. 自媒体全是带节奏的标题党,不是创作者不行,而是用户们想看
  19. 公用移动数据通信网(CHINAMDN)(转)
  20. [我的世界]c++实现二维我的世界

热门文章

  1. mysql eav_mysql – 如何使此eav查询生成水平结果
  2. catflag Crypto KeyBoard
  3. Metamask如何关闭隐私模式,可以正常读取账号信息
  4. 关于 厦门“怪虫” 的一点感概
  5. Selenium登录126邮箱,定位不到账号输入框解决办法
  6. 整理准备使用wireshark、拉米在线解密PDM5生成密钥网址
  7. 超声的pacs系统和dicom服务器,PACS系统中DICOM/HL7网关与DICOM服务器的研究与实现
  8. 简单内存泄漏检测方法,解决Detected memory leaks!问题 .
  9. Xilinx SDK 中 的 'No rule to make target ' / '没有规则可以创建...'
  10. python对seo有什么用_pythonseo-python对于做SEO主要有什么作用