2017-09-27 3 views
0

경우 3 서브 클래스 다음 클래스 계층 : 파이썬 파이썬 3.5.2 내부 클래스

class Foobaz(object): 
    def __init__(self): 
     pass 


class Foo(object): 
    def __init__(self): 
     pass 


class Baz(Foobaz): 

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

    def __init__(self): 
     super(Baz, self).__init__() 
     self.bar = self.Bar() 


if __name__ == '__main__': 
    b = Baz() 

가 바즈 클래스 수율

super(Bar, self).__init__() 
NameError: name 'Bar' is not defined 

대상물로부터 직접 서브 클래스 내부 클래스를 갖는 인스턴스화 - 즉 슈퍼에 대한 호출이 없습니다. 나는 이유가 없다. 누군가 설명해 주시겠습니까?

답변

2

Bar이 보이지 않으면 클래스 변수입니다. 당신은 명시해야합니다 : super의 인수가없는 형태 당신이 돌봐 것을

super(Baz.Bar, self).__init__() 

를 적어 둡니다 :

super().__init__() 

가 잘 작동합니다.

+0

대단히 감사합니다. 이것은 내 인생을 더 쉽게 만들 것입니다. 그러나 두 가지 가능한 방법 중 어느 것이 바람직한 것입니까? – jake77

+0

버전에 무관심한 코드를 작성하는 경우 첫 번째 코드로 이동하십시오. 두 번째와 함께 가지 않으면. –

+2

'이상적'에 대한 설명을 삭제하십시오. 슈퍼에서'type (self)'를 사용하는 것은 큰 실수입니다! – wim