python
이 자습서에서는 Python의 다중 상속과 이를 프로그램에서 사용하는 방법을 배웁니다. 또한 다중 수준 상속 및 메서드 해결 순서에 대해 알아봅니다.
클래스는 C++와 유사하게 Python의 둘 이상의 기본 클래스에서 파생될 수 있습니다. 이것을 다중 상속이라고 합니다.
다중 상속에서 모든 기본 클래스의 기능은 파생 클래스로 상속됩니다. 다중 상속 구문은 단일 상속과 유사합니다.
class Base1:
pass
class Base2:
pass
class MultiDerived(Base1, Base2):
pass
여기에서 다중 파생 클래스는 Base1에서 파생됩니다. 및 Base2 수업.
<그림>다중 파생 클래스는 Base1 모두에서 상속됩니다. 및 Base2 수업.
<시간>파생 클래스에서 상속할 수도 있습니다. 이것을 다단계 상속이라고 합니다. Python의 모든 깊이가 될 수 있습니다.
다단계 상속에서는 기본 클래스와 파생 클래스의 기능이 새 파생 클래스로 상속됩니다.
해당 시각화의 예가 아래에 나와 있습니다.
class Base:
pass
class Derived1(Base):
pass
class Derived2(Derived1):
pass
여기에서 Derived1 클래스는 Base에서 파생됩니다. 클래스 및 Derived2 클래스는 Derived1에서 파생됩니다. 수업.
<그림> <시간>
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
Python 데이터 클래스는 @dataclass이 있는 일반 Python 클래스입니다. 장식가. 데이터를 보관하기 위해 특별히 만들어졌습니다. Python 버전 3.7부터 Python은 dataclass이라는 내장 모듈을 통해 데이터 클래스를 제공합니다. . 이 기사에서 살펴볼 일반 Python 클래스에 비해 몇 가지 장점이 있습니다. 또한 예제 코드와 데이터 클래스로 수행할 수 있는 몇 가지 일반적인 작업을 살펴보겠습니다. 목차 데이터 클래스 사용의 이점 Python 데이터 클래스 예시 기본값 데이터 클래스를 JSON으로 변환
상속은 한 클래스가 다른 클래스의 속성(메서드 및 필드)을 획득하는 프로세스로 정의할 수 있습니다. 상속을 사용하면 정보를 계층적 순서로 관리할 수 있습니다. 다른 사람의 속성을 상속하는 클래스를 하위 클래스(파생 클래스, 자식 클래스)라고 하고 속성을 상속받는 클래스를 슈퍼 클래스(기본 클래스, 부모 클래스)라고 합니다. 확장 키워드 확장 클래스의 속성을 상속하는 데 사용되는 키워드입니다. 다음은 extends 키워드의 구문입니다. 구문 class Super { ..... ..... } class Sub ext