super().init() 에 대해
업데이트:
카테고리: python
python에서 클래스를 사용하다보면, def init(self) : 에서 종종 super().init__() 을 사용하는 것을 볼 수 있습니다. 이게 무엇인가 궁금했는데, 이번 프로젝트를 진행하면서 무엇인지 알게된 것 같아서 글로 남겨놓으려고 합니다.
예제로 살펴보자!
아래의 예시 코드를 보면 parent와 child 클래스가 정의돼있습니다.
class parent_class():
def __init__(self):
self.val = 100
def parent_print(self):
print(self.val)
class child_class(parent_class):
def __init__(self):
super().__init__()
self.child_val = 999
child = child_class()
print("parent val is {}".format(child.val))
print("child val is {}".format(child.child_val))
위 코드를 실행시키면 결과는 다음과 같이 나옵니다.
parent val is 100
child val is 999
즉, super().init() 구문을 사용하면 parent 클래스 내에서 정의된 parameter들을 child 클래스에서도 자연스럽게 사용할 수 있게 됩니다.
만약 이 구문을 없애고 아래와 같이 코드를 실행해보면,
class parent_class():
def __init__(self):
self.val = 100
def parent_print(self):
print(self.val)
class child_class(parent_class):
def __init__(self):
self.child_val = 999
child = child_class()
print("parent val is {}".format(child.val))
print("child val is {}".format(child.child_val))
다음과 같은 오류가 발생합니다.
Traceback (most recent call last):
File "class_example.py", line 15, in <module>
print("parent val is {}".format(child.val))
AttributeError: 'child_class' object has no attribute 'val'
child 클래스에는 val이라는 파라미터를 갖지 않는다는 것이죠. 따라서 부모 클래스를 자식 클래스가 상속을 받아서 사용할 때, 부모 클래스의 파라미터를 가져와 사용하고 싶다면 super().init()을 이용하면 됩니다.