python多重继承的__init__该如何处理

2020-10-11  本文已影响0人  乐享书

今天在写一个python多重继承,但是init该如何处理呢?
不动脑,写了一个

class A:
    def __init__(self,sval): 
        print("A: rcd value: ",sval)
        self.aval = sval
        
class B: 
    def __init__(self,sval,tval):
        print("B: rcd 2 values: ",tval)
        self.aval=sval
        self.bval=tval

class C(A,B):
    def __init__(self,a,b,c):
        super().__init__(a) 
        super().__init__(b,c) # error here

c = C(1,2,3)

一想不对啊,super().init到底是调用的哪一个呢?

折腾半天,搞清楚了super的机制,直接奉上答案吧

class A:
    def __init__(self,aval,**kwargs): 
        print("A: rcd value: ",aval)
        self.aval = aval
        super().__init__(**kwargs)


class B: 
    def __init__(self,b1val,b2val,**kwargs):
        print("B: rcd 2 values: ",b2val)
        self.b1val = b1val
        self.b2val = b2val
        super().__init__(**kwargs)


class C(A, B):
    def __init__(self, a, b, c, **kwargs):
        super().__init__(aval=a, b1val=b, b2val=c, **kwargs)

c = C(1, 2, 3)

上一篇下一篇

猜你喜欢

热点阅读