python-面向对向-实例方法的继承-多继承父类中的super与子类实例对象的关系

本文深入探讨了Python中使用super()方法在多继承环境下实现方法调用的机制,详细解释了如何通过子类继承父类并调用父类方法,特别关注super()在方法调用过程中的作用及其实现机制。

初始代码

class Father:
    def run(self):
        print('father de run')

    def one(self):
        print('father de one')

class Mother:
    def one(self):
        print('mother de one')


class Teacher:
    pass


class Son(Father,Mother,Teacher):
    pass

s = Son()
s.run()

运行效果

在这里插入图片描述

Father类中的super登场

在这里插入图片描述

有了前面的基础,这个o是什么基本可以理解了

o代表了Son类的基类的实例对象,不包含Father

super对象的另一种写法

在这里插入图片描述

效果是一样的

如果Son的第三个基类也有方法,试着调一下

在这里插入图片描述

父类中的o调用teach方法

在这里插入图片描述

结果

在这里插入图片描述

关注teach方法中的self是谁

给每一个类都添加一个实例属性

然后在teach方法中打印实例属性的值

览定self是谁

代码:

class Father:
    def __init__(self):
        self.name = 'father'
    def run(self):
        print('father de run')
        # o = super()
        o = super(Father, self)
        o.teach()

    def one(self):
        print('father de one')

class Mother:
    def one(self):
        print('mother de one')


class Teacher:
    def __init__(self):
        self.name = 'teacher'
    def teach(self):
        print('老师的实例方法,teach方法', self.name)


class Son(Father,Mother,Teacher):
    def __init__(self):
        self.name = 'son'


s = Son()
s.run()




从结果上来看

Teacher类中的self是son

验证self

class Father:
    def __init__(self):
        self.name = 'father'
    def run(self):
        print('father de run')
        # o = super()
        o = super(Father, self)
        o.teach()

    def one(self):
        print('father de one')

class Mother:
    def one(self):
        print('mother de one')


class Teacher:
    def __init__(self):
        self.name = 'teacher'
    def teach(self):
        print('老师的实例方法,teach方法', self.name)
        print('teach self id',id(self), self)


class Son(Father,Mother,Teacher):
    def __init__(self):
        self.name = 'son'


s = Son()
print('s obj id', id(s), s)
s.run()




结果

在这里插入图片描述

表明一个原理

通过子类的继承,调用的父类方法中,如果有super()的实例对象,这个实例对象,就是一个抽象的子类实例对象的父类。

即 本例中的 o 是 s的父类对象

o所调用的方法中的self就是s对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲸鱼编程pyhui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值