산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

파이썬 다중 상속

Python 다중 상속

이 자습서에서는 Python의 다중 상속과 이를 프로그램에서 사용하는 방법을 배웁니다. 또한 다중 수준 상속 및 메서드 해결 순서에 대해 알아봅니다.

Python 다중 상속

클래스는 C++와 유사하게 Python의 둘 이상의 기본 클래스에서 파생될 수 있습니다. 이것을 다중 상속이라고 합니다.

다중 상속에서 모든 기본 클래스의 기능은 파생 클래스로 상속됩니다. 다중 상속 구문은 단일 상속과 유사합니다.

예시

class Base1:
    pass

class Base2:
    pass

class MultiDerived(Base1, Base2):
    pass

여기에서 다중 파생 클래스는 Base1에서 파생됩니다. 및 Base2 수업.

<그림>

다중 파생 클래스는 Base1 모두에서 상속됩니다. 및 Base2 수업.

<시간>

Python 다단계 상속

파생 클래스에서 상속할 수도 있습니다. 이것을 다단계 상속이라고 합니다. Python의 모든 깊이가 될 수 있습니다.

다단계 상속에서는 기본 클래스와 파생 클래스의 기능이 새 파생 클래스로 상속됩니다.

해당 시각화의 예가 아래에 나와 있습니다.

class Base:
    pass

class Derived1(Base):
    pass

class Derived2(Derived1):
    pass

여기에서 Derived1 클래스는 Base에서 파생됩니다. 클래스 및 Derived2 클래스는 Derived1에서 파생됩니다. 수업.

<그림> <시간>

Python의 메서드 해결 순서

Python의 모든 클래스는 object에서 파생됩니다. 수업. 파이썬에서 가장 기본적인 유형입니다.

따라서 기술적으로 내장 또는 사용자 정의의 다른 모든 클래스는 파생 클래스이고 모든 개체는 object의 인스턴스입니다. 수업.

# Output: True
print(issubclass(list,object))

# Output: True
print(isinstance(5.5,object))

# Output: True
print(isinstance("Hello",object))

다중 상속 시나리오에서는 지정된 속성이 현재 클래스에서 먼저 검색됩니다. 찾지 못하면 동일한 클래스를 두 번 검색하지 않고 깊이 우선, 왼쪽-오른쪽 방식으로 상위 클래스로 검색을 계속합니다.

따라서 위의 MultiDerived 예에서 클래스 검색 순서는 [MultiDerived입니다. , Base1 , Base2 , object ]. 이 순서는 MultiDerived의 선형화라고도 합니다. 클래스 및 이 순서를 찾는 데 사용되는 규칙 집합을 메서드 해결 순서(MRO)라고 합니다. .

MRO는 지역 우선 순위를 방지하고 단조성을 제공해야 합니다. 클래스가 항상 부모보다 먼저 표시되도록 합니다. 부모가 여러 개인 경우 기본 클래스의 튜플과 같은 순서입니다.

클래스의 MRO는 __mro__으로 볼 수 있습니다. 속성 또는 mro() 방법. 전자는 튜플을 반환하고 후자는 목록을 반환합니다.

>>> MultiDerived.__mro__
(<class '__main__.MultiDerived'>,
 <class '__main__.Base1'>,
 <class '__main__.Base2'>,
 <class 'object'>)

>>> MultiDerived.mro()
[<class '__main__.MultiDerived'>,
 <class '__main__.Base1'>,
 <class '__main__.Base2'>,
 <class 'object'>]

다음은 좀 더 복잡한 다중 상속 예제와 MRO와 함께 시각화한 것입니다.

<그림>
# Demonstration of MRO

class X:
    pass


class Y:
    pass


class Z:
    pass


class A(X, Y):
    pass


class B(Y, Z):
    pass


class M(B, A, Z):
    pass

# Output:
# [<class '__main__.M'>, <class '__main__.B'>,
#  <class '__main__.A'>, <class '__main__.X'>,
#  <class '__main__.Y'>, <class '__main__.Z'>,
#  <class 'object'>]

print(M.mro())

출력

[<class '__main__.M'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.X'>, <class '__main__.Y'>, <class '__main__.Z'>, <class 'object'>]

MRO 계산 방법에 대한 실제 알고리즘을 알아보려면 MRO에 대한 토론을 방문하세요.


python

  1. 파이썬 데이터 유형
  2. 파이썬 연산자
  3. 파이썬 통과 문
  4. 파이썬 사전
  5. Python 사용자 정의 예외
  6. 파이썬 객체 지향 프로그래밍
  7. 파이썬 상속
  8. 예제가 있는 Python의 type() 및 isinstance()
  9. C# - 상속
  10. 파이썬 - 객체 지향