初始代码
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对象
本文深入探讨了Python中使用super()方法在多继承环境下实现方法调用的机制,详细解释了如何通过子类继承父类并调用父类方法,特别关注super()在方法调用过程中的作用及其实现机制。
2919

被折叠的 条评论
为什么被折叠?



