20201204_108.super()获得父类的定义 原创

1324-易同学

发表文章数:163

首页 » Python » 正文

super()获得父类定义

在子类中,如果想要获得父类的方法时,我们可以通过super()来做。
super()的作用是调用父类的定义(可以理解为代码),不是父类对象。

【案例】
例1.1 直接用父类对象调用

class A:
    def say(self):
        print('A:', self)


class B(A):
    def say(self):
        A.say(self)
        print('B:', self)


B().say()

运行结果:
20201204_108.super()获得父类的定义
                    原创
例1.2 用super()来调用父类属性

class A:
    def say(self):
        print('A:', self)


class B(A):
    def say(self):
        super().say()
        print('B:', self)


B().say()

运行结果
20201204_108.super()获得父类的定义
                    原创

super()有什么用?

到这里有的同学就会跟我一样有疑问了,不是可以通过父类对象来调用吗,那super()还有什么存在的必要啊?

我查了一下Python说明书中的解释,如下:

There are two typical use cases for super. In a class hierarchy with single inheritance, super can be used to refer to parent classes without naming them explicitly, thus making the code more maintainable. This use closely parallels the use of super in other programming languages.

The second use case is to support cooperative multiple inheritance in a dynamic execution environment. This use case is unique to Python and is not found in statically compiled languages or languages that only support single inheritance. This makes it possible to implement “diamond diagrams” where multiple base classes implement the same method. Good design dictates that this method have the same calling signature in every case (because the order of calls is determined at runtime, because that order adapts to changes in the class hierarchy, and because that order can include sibling classes that are unknown prior to runtime).

意思是常有两重情况会用到:

  1. 简单的1对1继承关系中,如果父类的名字较长,懒得打那么多字,可以用super()。哈哈哈,外国朋友们是很会偷懒的;
  2. 在复杂的多重继承关系中,包括有兄弟姊妹类的关系中,由于有__mro__机制存在,用super()可以使调用的代码永远都是那个直接的父类,即便继承关系发生变化也是这样。这样就避免了在维护时只要继承关系一变化就绪要去修改调用的父类对象名称的麻烦。

未经允许不得转载:作者:1324-易同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《20201204_108.super()获得父类的定义 原创》 发布于2020-12-05

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录