모든 기본 클래스 생성자가 호출되지 않는 이유는 무엇입니까?

션 볼린

Python 2.7.10에서

class OneMixin(object):
    def __init__(self):
        # super(OneMixin, self).__init__()
        print "one mixin"

class TwoMixin(object):
    def __init__(self):
        # super(TwoMixin, self).__init__()
        print "two mixin"

class Account(OneMixin, TwoMixin):
    def __init__(self):
        super(Account, self).__init__()
        print "account"

Account.mro ()는 다음과 같습니다. [<class 'Account'>, <class 'OneMixin'>, <class 'TwoMixin'>, <type 'object'>]

모든 클래스가 MRO에 나열되어 있지만 "two mixin"은 인쇄되지 않습니다.

OneMixin과 TwoMixin에서 수퍼 콜의 주석 처리를 제거하면 MRO는 정확히 동일하지만 "two mixin"이 인쇄됩니다.

왜 다른가요? MRO의 모든 것이 호출되기를 기대합니다.

음소거

이는 super유형의 부모 또는 형제 클래스에 호출을 위임하는 데 사용 되기 때문 입니다. Python 문서 에는 두 번째 사용 사례에 대한 다음 설명이 있습니다.

두 번째 사용 사례는 동적 실행 환경에서 협력 적 다중 상속을 지원하는 것입니다. 이 사용 사례는 Python에 고유하며 정적으로 컴파일 된 언어 또는 단일 상속 만 지원하는 언어에서는 찾을 수 없습니다. 이를 통해 여러 기본 클래스가 동일한 메서드를 구현하는 "다이아몬드 다이어그램"을 구현할 수 있습니다. 좋은 디자인은이 메서드가 모든 경우에 동일한 호출 서명을 갖도록 지정합니다 (호출 순서는 런타임에 결정되기 때문입니다. 그 순서는 클래스 계층 구조의 변경 사항에 적응하고 해당 순서는 런타임 전에 알 수없는 형제 클래스를 포함 할 수 있기 때문입니다) ).

super호출 을 제거하면 OneMixinMRO의 다음 유형으로 호출을 위임하는 것이 없습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내 기본 클래스의 정적 생성자가 호출되지 않는 이유는 무엇입니까?

분류에서Dev

기본 클래스 생성자가 값을 설정하지 않는 이유는 무엇입니까?

분류에서Dev

내 자식 클래스 생성자가 호출되지 않는 이유는 무엇입니까?

분류에서Dev

파생 클래스 생성자에서 예외가 발생합니다. 기본 클래스 소멸자가 호출되지만 파생 클래스 소멸자가 아닌 이유는 무엇입니까?

분류에서Dev

기본 클래스가 정의되지 않은 이유는 무엇입니까?

분류에서Dev

파생 클래스가 기본 클래스 생성자를 두 번 호출 할 수있는 이유는 무엇입니까?

분류에서Dev

기본 클래스 생성자를 호출 할 수없는 이유는 무엇입니까?

분류에서Dev

내 C # 기본 생성자가 호출되지 않는 이유는 무엇입니까?

분류에서Dev

자식 클래스에 자식 클래스 객체를 만들지 않으면 부모 클래스에 기본 생성자가 필요한 이유는 무엇입니까?

분류에서Dev

기본 클래스의 멤버가 생성자에서 처음 초기화 된 값을 유지하지 않는 이유는 무엇입니까?

분류에서Dev

내 클래스의 모든 속성이 렌더링되지 않는 이유는 무엇입니까?

분류에서Dev

클래스에는 기본 생성자가 필요하지만 구조는 필요하지 않은 이유는 무엇입니까?

분류에서Dev

모든 기본 인수가있는 명시 적 생성자는 동일한 클래스의 다른 생성자에서 호출 할 수 없습니다.

분류에서Dev

모든 메서드가 클래스에서 상속되지 않는 이유는 무엇입니까?

분류에서Dev

부모 클래스가 보호되지 않는 이유는 무엇입니까? (자바)

분류에서Dev

슈퍼 클래스 지정 이니셜 라이저가 기본적으로 호출되는 이유는 무엇입니까?

분류에서Dev

이동 생성자가 여기에서 호출되지 않는 이유는 무엇입니까?

분류에서Dev

통합 또는 통합 유사 클래스에 대해 기본 생성자가 삭제되는 이유는 무엇입니까?

분류에서Dev

생성시 C ++ 클래스의 소멸자가 호출되는 이유는 무엇입니까?

분류에서Dev

Runnable Interface를 구현하는 클래스의 생성자가 호출되지 않는 이유는 무엇입니까?

분류에서Dev

상속 된 클래스의 소멸자가 호출되지 않는 이유는 무엇입니까?

분류에서Dev

기본 클래스에서 메서드를 호출하면 자식 메서드가 호출되는 이유는 무엇입니까?

분류에서Dev

손자 클래스의 부모가 조부모 클래스의 초기화를 처리하지 않는 이유는 무엇입니까?

분류에서Dev

이 코드가 기본 클래스를 C ++의 파생 클래스로 캐스팅하지 않는 이유는 무엇입니까?

분류에서Dev

부모 프로세스가 wait () 함수를 호출하기 전에 자식 프로세스가 종료되지 않는 이유는 무엇입니까?

분류에서Dev

이 클래스를 초기화 할 때 목록 초기화가 호출되지 않는 이유는 무엇입니까?

분류에서Dev

클래스 다이어그램에 모든 클래스가 포함되지 않는 이유는 무엇입니까?

분류에서Dev

C ++에서 기본 클래스에 대한 포인터가 주어 졌을 때 파생 클래스 개체에 대한 오버로드 된 함수가 호출되지 않는 이유는 무엇입니까?

분류에서Dev

내 시작 클래스가 모든 예제와 동일하지 않은 이유는 무엇입니까?

Related 관련 기사

  1. 1

    내 기본 클래스의 정적 생성자가 호출되지 않는 이유는 무엇입니까?

  2. 2

    기본 클래스 생성자가 값을 설정하지 않는 이유는 무엇입니까?

  3. 3

    내 자식 클래스 생성자가 호출되지 않는 이유는 무엇입니까?

  4. 4

    파생 클래스 생성자에서 예외가 발생합니다. 기본 클래스 소멸자가 호출되지만 파생 클래스 소멸자가 아닌 이유는 무엇입니까?

  5. 5

    기본 클래스가 정의되지 않은 이유는 무엇입니까?

  6. 6

    파생 클래스가 기본 클래스 생성자를 두 번 호출 할 수있는 이유는 무엇입니까?

  7. 7

    기본 클래스 생성자를 호출 할 수없는 이유는 무엇입니까?

  8. 8

    내 C # 기본 생성자가 호출되지 않는 이유는 무엇입니까?

  9. 9

    자식 클래스에 자식 클래스 객체를 만들지 않으면 부모 클래스에 기본 생성자가 필요한 이유는 무엇입니까?

  10. 10

    기본 클래스의 멤버가 생성자에서 처음 초기화 된 값을 유지하지 않는 이유는 무엇입니까?

  11. 11

    내 클래스의 모든 속성이 렌더링되지 않는 이유는 무엇입니까?

  12. 12

    클래스에는 기본 생성자가 필요하지만 구조는 필요하지 않은 이유는 무엇입니까?

  13. 13

    모든 기본 인수가있는 명시 적 생성자는 동일한 클래스의 다른 생성자에서 호출 할 수 없습니다.

  14. 14

    모든 메서드가 클래스에서 상속되지 않는 이유는 무엇입니까?

  15. 15

    부모 클래스가 보호되지 않는 이유는 무엇입니까? (자바)

  16. 16

    슈퍼 클래스 지정 이니셜 라이저가 기본적으로 호출되는 이유는 무엇입니까?

  17. 17

    이동 생성자가 여기에서 호출되지 않는 이유는 무엇입니까?

  18. 18

    통합 또는 통합 유사 클래스에 대해 기본 생성자가 삭제되는 이유는 무엇입니까?

  19. 19

    생성시 C ++ 클래스의 소멸자가 호출되는 이유는 무엇입니까?

  20. 20

    Runnable Interface를 구현하는 클래스의 생성자가 호출되지 않는 이유는 무엇입니까?

  21. 21

    상속 된 클래스의 소멸자가 호출되지 않는 이유는 무엇입니까?

  22. 22

    기본 클래스에서 메서드를 호출하면 자식 메서드가 호출되는 이유는 무엇입니까?

  23. 23

    손자 클래스의 부모가 조부모 클래스의 초기화를 처리하지 않는 이유는 무엇입니까?

  24. 24

    이 코드가 기본 클래스를 C ++의 파생 클래스로 캐스팅하지 않는 이유는 무엇입니까?

  25. 25

    부모 프로세스가 wait () 함수를 호출하기 전에 자식 프로세스가 종료되지 않는 이유는 무엇입니까?

  26. 26

    이 클래스를 초기화 할 때 목록 초기화가 호출되지 않는 이유는 무엇입니까?

  27. 27

    클래스 다이어그램에 모든 클래스가 포함되지 않는 이유는 무엇입니까?

  28. 28

    C ++에서 기본 클래스에 대한 포인터가 주어 졌을 때 파생 클래스 개체에 대한 오버로드 된 함수가 호출되지 않는 이유는 무엇입니까?

  29. 29

    내 시작 클래스가 모든 예제와 동일하지 않은 이유는 무엇입니까?

뜨겁다태그

보관