반응형
자식 클래스에서 따로 생성자를 선언하지 않으면
자식 객체를 생성하면 자동으로 부모클래스의 생성자를 실행한다.
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의 부모를 의미하게 된다.
반응형
'프로그래밍 관련 > 파이썬' 카테고리의 다른 글
크롤링 (0) | 2023.02.26 |
---|---|
윈도10에서 파이썬 실행 안될 때 (1) | 2022.08.12 |
파이썬 클래스. 구조체 (0) | 2021.12.02 |
메소드 오버라이딩/ 오버로딩 개념 (0) | 2021.11.28 |
파이썬 - str 클래스. 문자열 클래스 (0) | 2021.11.13 |