2010-09-06 5 views
4

Скажу, У меня есть следующий два класса:Как я могу вызвать метод базового класса в Python?

class A(object): 
    def __init__(self, i): 
     self.i = i 
class B(object): 
    def __init__(self, j): 
     self.j = j 

class C(A, B): 
    def __init__(self): 
     super(C, self).__init__(self, 4) 
c = C() 

с будет иметь только я набор атрибуты, а не J. Что мне написать, чтобы установить оба атрибута/только атрибут j?

+0

Im угадывание B должны наследовать от А и назвать супер как хорошо – Robus

ответ

5

Если вы хотите установить только атрибут j, то вызывать только B.__init__:

class C(A, B): 
    def __init__(self): 
     B.__init__(self,4) 

Если вы хотите, чтобы вручную вызвать как A и __init__ методы B «s, то , конечно, вы могли бы сделать это:

class C(A, B): 
    def __init__(self): 
     A.__init__(self,4) 
     B.__init__(self,4) 

Использование super является a bit tricky (в частности, смотрите раздел под названием "передача аргументов, Argh!"). Если вы все еще хотите использовать super, вот один из способов вы можете сделать это:

class D(object): 
    def __init__(self, i): 
     pass 
class A(D): 
    def __init__(self, i): 
     super(A,self).__init__(i) 
     self.i = i 
class B(D): 
    def __init__(self, j): 
     super(B,self).__init__(j)   
     self.j = j 

class C(A, B): 
    def __init__(self): 
     super(C, self).__init__(4) 
c = C() 
print(c.i,c.j) 
# (4, 4) 
2

Проверить это связывает Things to Know About Python Super

Выше ссылка объясняет многое о наследовании и использовании супер.

+0

Спасибо большое за ссылку! –

Смежные вопросы