python 多继承示例

多重继承顺序:带你吃透python的多重继承顺序 - 知乎

        python使用C3 linearization算法搜索,有时候又需要调用位置靠后父类的函数,下面我们来看一个实例。

 
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 岁了,体重 %d kg" % (self.name,self.age,self.__weight))
    def get_weight(self):
        return self.__weight
#单继承示例
class student(people): #子类student继承父类people
    grade=''
    def __init__(self,n,a,w,g):
        super(student,self).__init__(n,a,w)#调用父类构造函数
            #或者people.__init__(self,n,a,w)  使用这个可能会出现父类__init__多次调用的情况
            #或者super().__init__(n,a,w)
        # 也可以super().__init__(self,n,a,w)
        self.grade=g
    def speak(self):    #子类重写父类方法
        print("%s 说:我今年 %d 岁,读 %d 年级,体重 %d kg" % (self.name, self.age,self.grade, self.get_weight()))
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):
        student.__init__( self,n, a, w, g)
        super(sample,self).__init__( n, t)


test = sample("Tim",25,80,4,"Python")
print(sample.__mro__) #查看方法的搜索顺序
test.speak()   #方法名同,一般调用的是在括号中参数位置排前父类的方法(sample(speaker,student))
    #我叫 Tim,我是一个演说家,我演讲的主题是 Python
super(student,test).speak()#调用student父类方法
    #Tim 说:我今年 25 岁了,体重 80 kg

t2=student(test.name,test.age,test.get_weight(),test.grade)
t2.speak() #Tim 说:我今年 25 岁,读 4 年级,体重 80 kg

print(list(test.__dict__.values())[0:4]) #['Tim', 25, 80, 4]
    #__dict__属性获取sample类对象test的属性字典
    #提取字典的值,转为列表形式,截取前四个参数
t3=student(*list(test.__dict__.values())[0:4])
t3.speak() #Tim 说:我今年 25 岁,读 4 年级,体重 80 kg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值