城外土馒头 2023-09-19 16:18 采纳率: 0%
浏览 2

python多继承super方法

代码如下:



class people:
    #定义基本属性
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0
    #定义构造方法
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s 说: 我 %d 岁。" %(self.name,self.age))
 
#单继承示例
class student(people):
    grade = ''
    def __init__(self,n,a,w,g):
        #调用父类的构函
        people.__init__(self,n,a,w)
        self.grade = g
    #覆写父类的方法
    def speak(self):
        print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
 
#另一个类,多重继承之前的准备
class speaker():
    topic = ''
    name = ''
    def __init__(self,n,t):
        self.name = n
        self.topic = t
    def speak(self):
        print("我叫 %s,我是一个演说家,我演讲的主题是 %s"%(self.name,self.topic))
 
#多重继承
class sample(speaker,student):
    a =''
    def __init__(self,n,a,w,g,t):
        print(sample.__mro__)
        student.__init__(self,n,a,w,g)
        speaker.__init__(self,n,t)
        #student.speak()
        super(sample,self).speak()
        super(student,self).speak()
        super(speaker,self).speak()
 
test = sample("Tim",25,80,4,"Python")
test.speak()

输出为:

(<class '__main__.sample'>, <class '__main__.speaker'>, <class '__main__.student'>, <class '__main__.people'>, <class 'object'>)
我叫 Tim,我是一个演说家,我演讲的主题是 Python
Tim 说: 我 25 岁。
Tim 说: 我 25 岁了,我在读 4 年级
我叫 Tim,我是一个演说家,我演讲的主题是 Python

轻微为啥super(speaker,self).speak()的输出为"Tim 说: 我 25 岁了,我在读 4 年级",speaker的输出没有继承student类啊,还是说super方法只根据__mro__的排列顺序进行,而不根据实际继承关系进行

  • 写回答

2条回答 默认 最新

  • 卑以自牧w 2023-09-19 17:02
    关注

    多重继承调用顺序根据mro确定

    评论

报告相同问题?

问题事件

  • 创建了问题 9月19日