Priv's Blog
클래스 다중 상속 중, MRO에 따르는 점에 주의할 부분 본문
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에서 가져옴
'Dev. Study Note > Python' 카테고리의 다른 글
시퀀스, 튜플, 세트 간단 정리 (0) | 2020.11.29 |
---|---|
if 문에서 or 중첩 사용 시 주의할 점 (0) | 2020.09.22 |
클래스 개념 용어 정리 (0) | 2019.08.17 |
생성자(Constructor : 컨스트럭터) (0) | 2019.08.17 |
외부 파일을 read로 불러와 순서대로 나열한 뒤 콘솔에 출력하기 (0) | 2019.08.17 |
Comments