>백엔드 개발 >파이썬 튜토리얼 >다중 상속에서 부모 클래스 `__init__` 메서드를 올바르게 호출하려면 어떻게 해야 합니까?

다중 상속에서 부모 클래스 `__init__` 메서드를 올바르게 호출하려면 어떻게 해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-01 05:36:10457검색

How Do I Properly Call Parent Class `__init__` Methods in Multiple Inheritance?

다중 상속으로 상위 클래스 init 호출

다중 상속이 사용되는 시나리오에서는 다음을 확인하는 것이 중요합니다. 모든 상위 클래스 생성자가 호출됩니다. 두 가지 일반적인 접근 방식은 다음과 같습니다.

  • ParentClass.__init__(self) (이전 스타일)
  • super(DerivedClass, self).__init__() (최신 스타일)

그러나 부모 클래스가 일관된 규칙을 따르지 않으면 이러한 접근 방식은 실패할 수 있습니다.

올바른 접근 방식 결정

적절한 접근 방식은 기본 클래스가 여러 용도로 설계되었는지 여부에 따라 다릅니다. 상속:

1. 독립형 기본 클래스

  • 다중 상속을 위해 설계되지 않았습니다.
  • 다음 중 하나를 사용하여 각 상위 생성자를 수동으로 호출합니다.

    • super가 없는 경우: Foo.__init__(self), Bar.__init__(self)
    • super 사용: super().__init__() (Foo까지의 모든 생성자용), super(Foo, self).__init__(bar) (용 이후의 모든 생성자 푸)

2. Mixins

  • 다중 상속을 위해 설계되었습니다.
  • mixin 클래스에서 super().__init__()를 사용하여 자동으로 다음 생성자를 호출합니다.
  • 먼저 믹스인에서 상속합니다(예: class FooBar(FooMixin, 바).

3. 협동 상속을 위해 설계된 클래스

  • mixin과 유사하지만 모든 인수가 키워드 인수로 전달됩니다.
  • 모든 클래스에서 super().__init__()를 호출합니다.
  • 기본 클래스의 순서는 그렇지 않습니다. Matter.

추가 고려 사항

  • 객체 하위 클래스의 경우 super().__init__() 호출을 피하세요.
  • 독립 실행형의 경우 클래스, 객체에서 직접 상속하는 경우 항상 빈 생성자를 제공합니다(예: class Base(object): def __init__(self): pass).

궁극적으로 올바른 구현은 관련된 클래스에 따라 다릅니다. 클래스가 다중 상속을 위해 설계된 경우 이에 따라 문서화해야 합니다. 그렇지 않으면 그러한 시나리오에 맞게 설계되지 않았다고 가정하십시오.

위 내용은 다중 상속에서 부모 클래스 `__init__` 메서드를 올바르게 호출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.