파이썬에서 MRO(Method Resolution Order)는 클래스에서 메서드를 검색할 때 사용되는 순서를 말합니다. 특히 파이썬의 클래스 상속이 다중 상속을 포함할 수 있기 때문에, 어떤 순서로 메서드를 찾아야 할지 결정하는 규칙이 필요합니다. 파이썬은 이를 위해 C3 선형화 알고리즘을 사용하여 클래스의 MRO를 결정합니다. 이 알고리즘은 클래스의 상속 구조를 선형 리스트로 변환하여, 메서드 호출 시 어떤 클래스의 메서드를 사용할지 명확하게 합니다.
MRO의 중요성
MRO는 다중 상속 시 발생할 수 있는 복잡성과 모호성을 해결합니다. 특정 메서드를 호출할 때, 파이썬은 이 MRO 리스트를 따라서 해당 메서드를 가진 첫 번째 클래스를 찾아 그 메서드를 실행합니다. 이는 프로그램의 일관성을 유지하고 예측 가능한 동작을 보장하는 데 중요합니다.
MRO 사용 방법
클래스의 __mro__
속성이나 mro()
메서드를 사용하면 해당 클래스의 MRO를 확인할 수 있습니다.
예시:
class A:
pass
class B(A):
pass
class C(A):
pass
class D(B, C):
pass
print(D.__mro__)
# 또는
print(D.mro())
# (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
이 코드는 D 클래스의 MRO를 출력합니다. 여기서 D 클래스는 B와 C를 상속받고, B와 C는 각각 A를 상속받습니다. 파이썬은 이 상속 구조를 바탕으로 D 클래스의 MRO를 결정합니다.
MRO 규칙
C3 선형화는 몇 가지 기본 규칙을 따릅니다:
- 자식 클래스는 항상 부모 클래스보다 먼저 나타납니다.
- 상속된 클래스들의 순서는 그대로 유지됩니다.
- 각 클래스는 MRO 리스트에서 단 한 번만 나타납니다.
MRO와 다중 상속
다중 상속 환경에서 MRO는 특히 중요합니다. MRO는 다중 상속으로 인해 발생할 수 있는 메서드 호출의 모호성을 해결하고, 클래스 간의 상속 관계가 복잡할 때 프로그래머가 클래스 동작을 더 쉽게 이해하고 예측할 수 있도록 돕습니다.
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
__new__, __init__ 차이점 (0) | 2024.03.20 |
---|---|
매직메소드란? (0) | 2024.03.20 |
GIL(Global Interpreter Lock) (0) | 2024.03.20 |
데코레이터란? (0) | 2024.03.20 |
코루틴이란? (0) | 2024.03.20 |