본문 바로가기
프로그래밍 관련/파이썬

파이썬. 클래스 상속과 생성자에 대하여. 그리고 super에 대하여

by 존버매니아.임베디드 개발자 2021. 12. 2.
반응형

 

자식 클래스에서 따로 생성자를 선언하지 않으면

자식 객체를 생성하면 자동으로 부모클래스의 생성자를 실행한다.

class paraent():
    def __init__(self,input1):
        print("부모 생성자 실행. 인풋 파라미터는")
        print(input1)

class child(paraent):
    pass

test_var=child("안녕")

 

근데 위 예시를 보면, paraent클래스의 생성자가 실행되려면 객체를 만들때 input 객체 1개가 필요하다.

따라서,

test_var=child()

코드를 이렇게만 짜면 argument가 모자라다는 에러가 발생한다.

왜냐면 child 클래스는 따로 생성자를 정의하지 않았기 때문에, default로 paraent의 생성자를 호출해야하는데

paraent의 생성자는 input을 담아와야되는데

child() 라고 호출하면 input이 없기 때문이다.


자식 클래스에서 따로 생성자를 선언하면

부모 클래스의 생성자는 자동으로 호출되지 않는다.

 

만약 자식클래스에서 생성자를 만들면서 & 부모클래스의 생성자도 호출하고 싶다면 super class를 사용해서 직접 호출해야한다.

class paraent():
    def __init__(self,input1):
        print("부모 생성자 실행. 인풋 파라미터는")
        print(input1)

class child(paraent):
    def __init__(self):
        print("자식 생성자 실행")

test_var=child()
>>> 자식 생성자 실행

 

위 예시에서는 자식 클래스에서 생성자를 만들었기 때문에, 더 이상 부모클래스의 생성자가 자동 호출 되지 않는다.

이런 경우 부모생성자를 호출하고 싶다면 슈퍼클래스를 사용해서 직접 호출해줘야 한다.

class paraent():
    def __init__(self,input1):
        print("부모 생성자 실행. 인풋 파라미터는")
        print(input1)

class child(paraent):
    def __init__(self,input):        
        super().__init__(input)        
        print("자식 생성자 실행")


test_var=child("테스트")
>>> 부모 생성자 실행. 인풋 파라미터는
>>> 테스트
>>> 자식 생성자 실행

super().__init___(input)
super(child,self).__init__(input)

참고로 위 에시에서 super()를 super(child,self) 로 바꿔도 의미는 같다.

super(child,self)는

child 클래스의 super 를 부르겠다는 의미이며, 이를 생략하고 그냥 super()라고만 써도

child의 부모를 의미하게 된다. 

반응형