Python에서 서브클래스가 상속받은 부모 클래스(슈퍼 클래스)를 초기화할 때는 내장 함수인 super()를 사용하는 것이 좋습니다. 부모 클래스를 직접 호출하는 방식보다 super()를 사용하면 코드가 더 유연하고 유지 보수하기 쉬워집니다.
super()를 사용하는 이유
부모 클래스 이름을 직접 명시해 초기화할 수도 있지만, 이 방식은 나중에 부모 클래스 이름이 바뀌면 코드를 일일이 수정해야 하는 번거로움이 있습니다. 반면 super()는 현재 클래스와 인스턴스를 기준으로 자동으로 부모 클래스를 찾아주기 때문에, 클래스 구조가 변경되어도 코드를 수정할 필요가 없습니다. 또한 다중 상속 환경에서 MRO(Method Resolution Order, 메서드 결정 순서)를 따르기 때문에 더 안전하게 동작합니다.
예제
다음 코드는 두 가지 초기화 방식을 비교해서 보여줍니다.
# 부모 클래스를 직접 호출하여 초기화하는 방식
class MySubClass(MySuperClass):
def __init__(self):
MySuperClass.__init__(self)
# super()를 사용해 부모 클래스를 초기화하는 개선된 방식
class MySubClassBetter(MySuperClass):
def __init__(self):
super(MySubClassBetter, self).__init__()Python 3에서 더 간결한 문법
Python 3부터는 super() 호출 시 클래스와 self 인수를 생략할 수 있습니다. 따라서 위의 코드는 아래처럼 더 간단하게 작성할 수 있습니다.
class MySubClassBetter(MySuperClass):
def __init__(self):
super().__init__()이처럼 super()를 활용하면 상속 구조에서 부모 클래스의 초기화 로직을 깔끔하고 안전하게 재사용할 수 있습니다.