2016-08-11 3 views
2

У меня есть этот код:Python наследование классов

class A(object): 
    def __init__(self): 
     print " A" 

class B(A): 
    def __init__(self): 
     print "B" 
x=B() 
print "Done" 

результат: "B" печатается почему она не печатает "А", Eventhough наследования класса B A

+1

Поскольку вы переопределение метода __init__? –

+0

Python автоматически не вызывает конструктор суперкласса для вас; вам нужно явно называть это самостоятельно. Тот факт, что это просто проходит молча, является одним из недостатков дизайна реализации системы класса Python. – user2357112

ответ

6

Если вы хотите Используйте'S __init__ а также с использованием Б __init__, попробуйте:

class A(object): 
    def __init__(self): 
     print " A" 

class B(A): 
    def __init__(self): 
     A.__init__(self) 
     print "B" 
x=B() 
print "Done" 

Или, если вы предпочитаете не говоря уже о суперкласс по имени:

class A(object): 
    def __init__(self): 
     print " A" 

class B(A): 
    def __init__(self): 
     super(B, self).__init__() 
     print "B" 
x=B() 
print "Done" 

Оба они производят вывод:

A 
B 
Done 
+1

Никогда не используйте 'super (self .__ class__, self)'. Он терпит неудачу, как только вы создаете потомка 'B' и' self .__ class__' больше не 'B'. – user2357112

+0

@ user2357112 Спасибо за это и за редактирование. – John1024