python multiple inheritance passing arguments to constructors using super

前端 未结 2 1965
春和景丽
春和景丽 2020-12-02 14:00

Consider the following snippet of python code

class A(object):
    def __init__(self, a):
        self.a = a

class B(A):
    def __init__(self, a, b):
              


        
2条回答
  •  囚心锁ツ
    2020-12-02 14:30

    Well, when dealing with multiple inheritance in general, your base classes (unfortunately) should be designed for multiple inheritance. Classes B and C in your example aren't, and thus you couldn't find a proper way to apply super in D.

    One of the common ways of designing your base classes for multiple inheritance, is for the middle-level base classes to accept extra args in their __init__ method, which they are not intending to use, and pass them along to their super call.

    Here's one way to do it in python:

    class A(object):
        def __init__(self,a):
            self.a=a
    
    class B(A):
        def __init__(self,b,**kw):
            self.b=b
            super(B,self).__init__(**kw)
    
     class C(A):
        def __init__(self,c,**kw):
            self.c=c
            super(C,self).__init__(**kw)
    
    class D(B,C):
        def __init__(self,a,b,c,d):
            super(D,self).__init__(a=a,b=b,c=c)
            self.d=d
    

    This can be viewed as disappointing, but that's just the way it is.

提交回复
热议问题