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()은 호출하지 않아도 된다.
'TIL > Python | Django' 카테고리의 다른 글
2021.8.25 TIL : [Python] 웹 크롤러 - 2 (0) | 2021.08.24 |
---|---|
2021.8.24 TIL : [Python] 웹 크롤러 - 1 (0) | 2021.08.24 |
2021.8.9 TIL : [Django] DRF 4 - View Sets & routers (0) | 2021.08.09 |
2021.8.7 TIL : [Django] DRF 3 - authentication (0) | 2021.08.07 |
2021.8.6 TIL : [Django] DRF 2 - 클래스기반 api / 제네릭 클래스 기반(Generic Class-based) api (0) | 2021.08.06 |
댓글