Что такое лучший способ справиться со структурой наследования, как это:множественное наследование с дополнительными свойствами
class A(object):
def __init__(self):
print('A')
class B(A):
def __init__(self, foo):
super(B, self).__init__()
self.foo = foo
print('B')
class C(A):
def __init__(self, bar):
super(C, self).__init__()
self.bar = bar
print('C')
class D(B, C):
def __init__(self, foo, bar):
super(D, self).__init__(foo, bar)
По сути, я хочу, чтобы быть в состоянии назвать:
>>> d = D('bar', 'ram ewe')
>>> d.foo
'bar'
>>> d.bar
'ram ewe'
В настоящее время super(D, self).__init__(foo, bar)
поднимает TypeError: __init__() takes exactly 2 arguments (3 given)
EDIT
Рабочий ответ, благодаря Даниэлю Роземан.
class A(object):
def __init__(self, *args, **kwargs):
print('A')
class B(A):
def __init__(self, foo, *args, **kwargs):
super(B, self).__init__(*args, **kwargs)
self.foo = foo
print('B')
class C(A):
def __init__(self, bar, *args, **kwargs):
super(C, self).__init__(*args, **kwargs)
self.bar = bar
print('C')
class D(B, C):
def __init__(self, foo, bar, *args, **kwargs):
super(D, self).__init__(foo, bar, *args, **kwargs)
См. Также: [super() считается супер] (http://rhettinger.wordpress.com/2011/05/26/super-considered-super/). Вопреки тому, что утверждает принятый ответ http://stackoverflow.com/q/4029550/395760, это очень возможно. – delnan
Хорошо читайте! Спасибо, delnan. –