混合类、多重继承、构造函数和数据
我有一个类:
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()
这个内容列出了几个构造函数,构造函数是用来创建对象的特殊方法。具体来说:
- A_1 构造函数
- A_2 构造函数
- B 构造函数
简单来说,构造函数就像是一个工厂,用来生产特定类型的产品(对象)。在这里,我们有两个属于“A”的构造函数和一个属于“B”的构造函数。