Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

다중 상속 Python 클래스에서 클래스 변수는 어떻게 작동합니까?


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

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

class Super1:
    pass
class Super2:
    pass
class MultiDerived(Super1, Super2):
   pass

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

따라서 위의 MultiDerived 클래스 예에서 검색 순서는 [MultiDerived, Super1, Super2, object]입니다. 이 순서를 MultiDerived 클래스의 선형화라고도 하며 이 순서를 찾는 데 사용되는 규칙 집합을 MRO(Method Resolution Order)라고 합니다.

MRO는 클래스가 항상 부모보다 먼저 나타나도록 하며 여러 부모의 경우 순서는 기본 클래스의 튜플과 동일합니다.

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

>>> MultiDerived.mro()
[<class '__main__.MultiDerived'>,
 <class '__main__.Super1'>,
 <class '__main__.Super2'>,
 <class 'object'>]