我的编程空间,编程开发者的网络收藏夹
学习永远不晚

总结python实现父类调用两种方法的不同

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

总结python实现父类调用两种方法的不同

python中有两种方法可以调用父类的方法:

super(Child, self).method(args)

Parent.method(self, args)

我用其中的一种报了如下错误:

查看图片

找不到 classobj。当我把调用改为 super(B, self).f(name) 就能正确运行,且结果正确。

分析错误

因为基类没有继承 object , 在python中,一个可以这样创建:


class A:
 pass

也可以这样创建:


class A(object):
 pass

这两者的区别就是:

查看图片

这是老式类(前者)和新式类(后者)的区别。区别可以参考:https://docs.python.org/release/2.5.2/ref/node33.html

python3已经把旧类型去掉了,也就是说已经隐式继承了object,所以,python3中写不写继承object都是没有区别的

两种调用的区别

Parent.__init__(self) 与 super(Child, self).__init__() 的区别是什么?

super 理解成父类也是理所当然,python里其实指的是 MRO 中的下一个类!

super其实干了这件事,看这个答案:


def super(cls, inst):
 mro = inst.__class__.mro() # Always the most derived class
 return mro[mro.index(cls) + 1]

MRO 全称 Method Resolution Order,它代表了类继承的顺序。

super 是用来解决多重继承问题的,假设B C D 都是直接继承class A


class E(B, C, D):
 def __init__(self):
  # code...

如果E类的构造函数使用 super(E, self).__init__() 时,A类的构造函数会被执行一次,而用另一种方法,A类的构造函数会被执行多次。

在 MRO 中,基类永远出现在派生类后面,如果有多个基类,基类的相对顺序保持不变。

总结

个人觉得,复杂的继承结构是设计中不良的设计,当继承结构清晰后,两个方法其实就没什么区别了。以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

总结python实现父类调用两种方法的不同

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

总结python实现父类调用两种方法的不同

python中有两种方法可以调用父类的方法: super(Child, self).method(args)Parent.method(self, args) 我用其中的一种报了如下错误:找不到 classobj。当我把调用改为 super
2022-06-04

Python强制子类重写父类的两种方法实现

Python中有两种强制子类重写父类方法的方法:抽象方法和@abstractmethod装饰器。抽象方法使用pass关键字标记,子类必须显式重写,否则会引发异常。@abstractmethod装饰器为父类方法添加抽象声明,同样强制子类重写。选择方法取决于具体需求,抽象方法确保完整行为,@abstractmethod装饰器提供灵活性。
Python强制子类重写父类的两种方法实现
2024-04-02

python调用excel_vba的两种实现方式

本文主要介绍了python调用excel_vba的两种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-29

Python实现打印九九乘法表的不同方法总结

这篇文章主要为大家介绍了Python实现打印九九乘法表的几种不同方法,文中的示例代码讲解详细,简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下
2022-11-16

Python实现将内容写入文件的五种方法总结

本篇带你详细看一下python将内容写入文件的方法以及细节,主要包括write()方法、writelines() 方法、print() 函数、使用 csv 模块、使用 json 模块,需要的可以参考一下
2023-05-17

Drupal实现不同节点类型使用不同模板的方法

本文实例讲述了Drupal实编程客栈现不同节点类型使用不同模板的方法。分享给大家供大家参考。具体实现方法如下:编程客栈 Drupal有独立的主题机制(theme engine),这个engine使得Drupal的模板控制非常灵活,与此同时要
2022-06-12

2019实用的Python运用技法总结:在两个字典中寻找相同点

2019实用的Python运用技法总结:在两个字典中寻找相同点前言:现在有两个字典,我们想找出它们中间可能相同的地方(相同的键、相同的值)
2023-06-02

如何用python实现中文输出的两种方法

如何用python实现中文输出的两种方法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。这篇Python学习教程主要介绍了python实现中文输出的两种方法,实例分析了Pyt
2023-06-02

Android 调用系统相机拍摄获取照片的两种方法实现实例

Android 调用系统相机拍摄获取照片的两种方法实现实例 在我们Android开发中经常需要做这个一个功能,调用系统相机拍照,然后获取拍摄的照片。下面是我总结的两种方法获取拍摄之后的照片,一种是通过Bundle来获取压缩过的照片,一种是通
2022-06-06

python常用的各种排序算法原理与实现方法小结

这篇文章主要介绍了python常用的各种排序算法原理与实现方法,结合实例形式总结分析了冒泡排序、插入排序、选择排序、快速排序等排序算法的相关原理与实现方法,需要的朋友可以参考下
2023-05-17

C#使用泛型方法实现操作不同数据类型的数组

泛型方法是一种强大的机制,允许C#操作不同数据类型的数组。通过使用类型参数,泛型方法变得可重用、通用和类型安全。使用泛型方法,我们可以实现各种操作,例如数组排序、搜索和转换。遵循创建泛型方法的步骤,包括使用类型参数、访问元素类型和使用类型约束,我们可以简化代码并减少错误。通过泛型方法,我们可以创建适用于广泛应用程序的通用代码。
C#使用泛型方法实现操作不同数据类型的数组
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录