HOWTO · Python

Python MRO(메서드 해결 순서)

이번 글에서는 파이썬 MRO(Method Resolution Order)가 무엇이고 상속에서 어떤 역할을 하는지 알아보겠습니다. MRO는 Python이 다중 상속을 포함하는 클래스에서 특정 함수를 가져오기 위해 사용하는 클래스의 검색 경로를 설명합니다.

다중 상속은 단일 하위 클래스가 둘 이상의 클래스를 상속할 수 있음을 의미하며 하위 클래스는 해당 특정 클래스에 대해 비공개가 아닌 경우 속성 및 함수에 액세스할 수 있는 권한이 부여됩니다. MRO 기술은 실행 중인 클래스의 순서를 검색하는 데 사용됩니다.

이번 글에서는 Python MRO(Method Resolution Order)에 대해 알아보겠습니다.

Python의 MRO(Method Resolution Order)

MRO는 Python에서 클래스 계층 구조에서 메서드를 찾는 순서입니다. 주로 하위 클래스의 부모 클래스에서 메서드와 특성을 찾는 데 사용됩니다.

먼저 상속하는 동안 지정된 순서에 따라 하위 클래스 내에서 특성 또는 메서드를 검색합니다. 이 순서는 클래스의 선형화라고도 하며 순서를 확인하는 동안 일련의 규칙이 적용됩니다.

다른 클래스에서 상속하는 동안 컴파일러는 클래스의 인스턴스를 통해 호출된 메서드를 해결하기 위한 적절한 방법이 필요합니다. 기본 클래스의 둘 이상의 상위 클래스에서 동일한 기능을 가질 때 다중 상속에서 중요한 역할을 합니다.

코드 예:

class A(object):
    def dothis(self):
        print("This is A class")


# Class B is inheriting Class A
class B(A):
    def dothis(self):
        print("This is B class")


# Class C is inheriting Class B
class C(B):
    def dothis(self):
        print("This is C class")


# Class D is inheriting Class C and B
class D(C, B):
    def dothis(self):
        print("This is D class")


# creating the object of Class D
d_obj = D()

# calling funtion dothis()
d_obj.dothis()
print(D.mro())

출력:

This is D class
[<class '__main__.D'>, <class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]

위의 예에서 dothis() 함수는 모든 클래스에서 사용할 수 있습니다. 클래스 Dd_obj 객체를 사용하여 호출하면 현재 클래스에서 먼저 확인합니다.

거기에 있으면 함수를 반환합니다. 그렇지 않으면 mro() 함수의 규칙에 따라 상위 클래스를 계속 조사합니다.

또한 클래스의 순서를 알기 위해 위의 D.mro() 예제와 같이 현재 클래스 이름을 사용하여 mro() 함수를 호출합니다. 현재 순서는 클래스 D -> 클래스 C -> 클래스 B -> 클래스 A 이며 상속 중에 적절하게 변경할 수 있습니다.