본문 바로가기
TIL/Python | Django

2021.8.23 TIL : [Python] 기초 문법9 - super()

by yeon_zoo 2021. 8. 23.

django를 활용해서 웹 개발을 하면서 빈번하게 클래스의 상속을 받아오게 되는데, super().메소드를 자주 마주하게 된다. 좀 더 명확하게 이해하기 위해서는 python 기초 문법들도 잘 알아야 할 것 같다. 클래스의 상속은 파이썬보다 자바를 공부하면서 좀 더 자세하게 알 수 있었다. 

 

super()은 자식 클래스에서 부모 클래스의 내용을 오버라이딩 하고 싶은 경우에 사용한다. 

class Person :
    def __init__(self):
        print('Person __init__')
        self.hello = '안녕하세요'
        
class Student(Person):
    def __init__(self):
        print('Student __init__')
        self.school = '파이썬 고등학교'
        
lee = Student()
print(lee.school)
print(lee.hello)

위와 같은 코드를 실행해보자. 그러면 다음과 같은 결과를 얻을 수 있다.

이는 부모 클래스 Person의 __init__ 메서드가 호출되지 않았기 때문이다. 즉, Person의 __init__메소드가 호출되지 않았기 때문에 self.hello 도 실행되지 않아서 속성이 만들어지지 않은 것이다. 

 

이럴 때 super()를 사용하면 슈퍼클래스(부모 클래스)의 init 메소드를 호출해 줄 수 있다. 

class Person :
    def __init__(self):
        print('Person __init__')
        self.hello = '안녕하세요'
        
class Student(Person):
    def __init__(self):
        print('Student __init__')
        super().__init__()
        self.school = '파이썬 고등학교'
        
lee = Student()
print(lee.school)
print(lee.hello)

위 코드를 실행하면 다음과 같은 결과를 얻는다.

즉 super().메소드() 를 이용하면 상속되지 않은 메소드라도 부모 클래스에서 호출할 수 있다.

 

반면 자식 클래스(여기서는 Student)에서 __init__ 메서드를 생략한다면 자동으로 부모 클래스(여기서는 Person)의 __init__을 호출하기 때문에 super()은 호출하지 않아도 된다. 

댓글