Python MRO(메서드 해결 순서)

Zeeshan Afridi 2023년6월21일
Python MRO(메서드 해결 순서)

다중 상속은 단일 하위 클래스가 둘 이상의 클래스를 상속할 수 있음을 의미하며 하위 클래스는 해당 특정 클래스에 대해 비공개가 아닌 경우 속성 및 함수에 액세스할 수 있는 권한이 부여됩니다. 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 이며 상속 중에 적절하게 변경할 수 있습니다.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn