混合类、多重继承、构造函数和数据

6 投票
2 回答
5113 浏览
提问于 2025-04-16 19:15

我有一个类:

class A(object):
    def __init__(self, *args):
        # impl

还有一个“混入”,基本上是另一个包含一些数据和方法的类:

class Mixin(object):
    def __init__(self):
        self.data = []

    def a_method(self):
        # do something

现在我创建了一个A的子类,并且使用了这个混入:

class AWithMixin(A, Mixin):
    pass

我的问题是,我希望A和混入的构造函数都能被调用。我考虑过给AWithMixin自己写一个构造函数,在里面调用父类的构造函数,但父类的构造函数参数列表不一样。有什么好的解决办法吗?

2 个回答

9

我也是面向对象编程(OOP)的新手,但这个代码有什么问题呢:

class AWithMixin(A, Mixin):
    def __init__(self, *args):
        A.__init__(self, *args)
        Mixin.__init__(self)
10
class A_1(object):
    def __init__(self, *args, **kwargs):
        print 'A_1 constructor'
        super(A_1, self).__init__(*args, **kwargs)

class A_2(object):
    def __init__(self, *args, **kwargs):
        print 'A_2 constructor'
        super(A_2, self).__init__(*args, **kwargs)

class B(A_1, A_2):
    def __init__(self, *args, **kwargs):
        super(B, self).__init__(*args, **kwargs)
        print 'B constructor'

def main():
    b = B()
    return 0

if __name__ == '__main__':
    main()

这个内容列出了几个构造函数,构造函数是用来创建对象的特殊方法。具体来说:

  1. A_1 构造函数
  2. A_2 构造函数
  3. B 构造函数

简单来说,构造函数就像是一个工厂,用来生产特定类型的产品(对象)。在这里,我们有两个属于“A”的构造函数和一个属于“B”的构造函数。

撰写回答