Araina’s Blog

클래스 다중 상속 중, MRO에 따르는 점에 주의할 부분 본문

Develop Study/Python

클래스 다중 상속 중, MRO에 따르는 점에 주의할 부분

Araina 2019. 8. 21. 22:37

 

class First :
    name = "first"
    
    def __init__(self) :
        print("First class")
    
    def printFirst(self) :
        print("first")
        
class Second :
    name = "second"
    
    def __init__(self) :
        print("First class")
    
    @classmethod
    def printName(cls) :
        print(cls.name)
    
class Third(First, Second) :
    pass

third = Third()

third.printName()
third.printFirst()

 

일반적인 객체 지향 언어와 달리 다중 상속을 지원하는 파이썬에서는 MRO(메소드 탐색 순서)에 따라 생성자 메소드를 탐색함.

 

즉, 파이썬은 다중 상속 시, 상속을 명시한 클래스 목록 중 왼쪽 -> 오른쪽으로 메소드를 탐색.

 

class Third(First, Second) :

(First 클래스의 메소드를 먼저 실행함)

 

이와 동일하게 파이썬은 클래스 변수의 이름이 동일하다면, 클래스 메소드의 위치와 상관없이 왼쪽 -> 오른쪽으로 클래스 변수에 접근한다.

 

이 때문에 위의 코드를 보면, 클래스 메소드가 Second 메소드에 있지만, First 클래스의 변수를 출력.

 

메소드는 Second에서 실행

변수는 First에서 가져옴

Comments