본문 바로가기
개발일지/Python

파이썬 class(클래스) 상속 기초원리3 부모class의 상속시 init초기화 super()

by 개발에정착하고싶다 2022. 5. 20.
320x100
# parents Class
class P_Class:

    def __init__(self, pNum1, pNum2):
        print('[P_Class] __init__() called!!')

        self.pNum1 = pNum1
        self.pNum2 = pNum2

# child Class
class C_Class(P_Class):

    def __init__(self,cNum1, cNum2):
        print('[C_Class] __init__() called!!')

        self.cNum1 = cNum1
        self.cNum2 = cNum2

cls = C_Class(10,20)
# 이렇게 C_Class가 P_Class를 상속받고 사용하고자 할때
# P_Class의 init메소드는 값이 초기화되지 않기 때문에 사실상 상속을 못받은거나 마찬가지다
# 이를 해결하기 위해서 다음의 방법들을 사용한다.

 

 

class P_Class:

    def __init__(self, pNum1, pNum2):
        # 이거는 init이 제대로 호출되었는지 확인하고자 하는 일종의 로그다.
        print('[P_Class] __init__() called!!')

        self.pNum1 = pNum1
        self.pNum2 = pNum2

# child Class
class C_Class(P_Class):

    def __init__(self,cNum1, cNum2):
        # 이거는 init이 제대로 호출되었는지 확인하고자 하는 일종의 로그다.
        print('[C_Class] __init__() called!!')

        # 상속받고자하는 부모의 init을 상속받는 자식의 클래스에 이런식으로 넣어준다.
        # 이때 주의할점은 self 뒤에 쓰이는 매개변수가 부모때에 쓰였던 매개변수 원소값이 아니라
        # 자식 클래스에서 새롭게 받은 매개변수값을 아래와 같이이 입력해줘야한다.
        # 방법1. 통상의 방법은 아니지만 암튼사용가능
        # P_Class.__init__(self,cNum1, cNum2)
        # 방법2. 이게 통상의 상속받고 init을 초기화 시키는 것이다.
        super().__init__(cNum1,cNum2)
        # 원리는 방법1과 같지만 self를 쓰지 않아도 된다는 점 등이 뭔가
        # 혼동의 여지가 아주 약간이나마 줄어드는것같다.

        self.cNum1 = cNum1
        self.cNum2 = cNum2


cls = C_Class(10,20)
300x250