Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 상속에서 여러 클래스를 확장하는 방법은 무엇일까?

super()를 활용한 다중 클래스 확장

파이썬 공식 문서에 따르면, super()는 상속 구조에서 여러 개의 파이썬 클래스를 확장하는 데 활용할 수 있습니다. 이 함수는 메서드 호출을 해당 타입의 부모(parent) 또는 형제(sibling) 클래스에 위임하는 프록시(proxy) 객체를 반환합니다.

super()의 동작 원리

클래스 안에서 오버라이드(재정의)된 상속 메서드에 접근해야 할 때 특히 유용합니다. 속성을 탐색하는 순서는 getattr()와 동일하지만, 한 가지 차이점은 타입 자체는 검색 대상에서 제외된다는 점입니다.

다른 관점에서 설명하면, super()를 호출하면 하나의 가짜(fake) 객체가 반환되며, 이 객체는 상속 체인 상위에 있는 클래스들로 속성 조회를 위임하는 역할을 합니다.

간단한 사용 예시

class A:
    def greet(self):
        return "Hello from A"

class B:
    def greet(self):
        return "Hello from B"

class C(A, B):
    def greet(self):
        return super().greet()

print(C().greet())  # Hello from A

사용 시 주의 사항

  • 구식(old-style) 클래스에서는 super()가 정상적으로 작동하지 않습니다.
  • Python 2.x에서는 자신의 클래스와 인스턴스를 super()에 명시적으로 전달해야 했습니다. 이 요구 사항은 Python 3.x부터 제거되어 인수 없이 간편하게 호출할 수 있습니다.

다중 상속의 올바른 처리

super()는 모든 형태의 다중 상속을 올바르게 처리합니다. 내부적으로 메서드 결정 순서(Method Resolution Order, MRO)가 생성되며, 속성 조회는 이 순서를 따라 부모 클래스들을 차례대로 거치게 됩니다. 덕분에 복잡한 상속 구조에서도 어떤 메서드가 호출될지 예측 가능하고 일관되게 동작합니다.