업데이트:

카테고리:

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()을 이용하면 됩니다.

최대 1 분 소요