2011-03-15 1 views
2

I 다음 상속 체인 가지고생성자 B는 (A)에 호출되지 않는다 -> B -> C 상속 체인

class Foo(object): 
    def __init__(self): 
     print 'Foo' 

class Bar(Foo): 
    def __init__(self): 
     print 'Bar' 
     super(Foo, self).__init__() 

class Baz(Bar): 
    def __init__(self): 
     print 'Baz' 
     super(Bar, self).__init__() 

바즈 클래스를 인스턴스화 할 때의 출력은 :

바즈

바의 생성자가 호출되지 않는 이유는 무엇입니까?

+0

작품을하지만, 복사 - 붙여 넣기는'슈퍼에서 들여 쓰기를 엉망 보였다()'Bar''라인을 . 그게 당신 문제일까요? –

+0

@ChinmayKanchi :이 코드가 어떻게 작동 했습니까? –

+0

LOL, 아마도 내가 들여 쓰기가 엉망이되었음을 알게되면 복사하여 붙여 넣기보다는 직접 입력했기 때문일 수 있습니다. 내 마음이 분명히 실수를 자동으로 수정했습니다. –

답변

9

super()을 호출하면 수퍼 클래스가 아닌 현재 클래스가 첫 번째 인수로 사용됩니다 (super()은 그 자체로 작동합니다). 이 경우, 다음은 ... 그것을 해결하려면 두 super() 호출로 변경주의해야한다 : 나를 위해

class Foo(object): 
    def __init__(self): 
     print 'Foo' 

class Bar(Foo): 
    def __init__(self): 
     print 'Bar' 
     super(Bar, self).__init__() 

class Baz(Bar): 
    def __init__(self): 
     print 'Baz' 
     super(Baz, self).__init__() 
관련 문제