본문 바로가기
PYTHON

[PYTHON] 상속

by kwh_coding 2023. 7. 5.

상속
 - 클래스끼리 물려주거나 물려받는 것을 말한다
 - 물려준 클래스(부모클래스,super)의 속성과 기능을 물려받는 클래스(자식클래스,sub)에서 사용이 가능하도록 
   만들고, 추가적인 표현을 통하여 새로운 클래스를 만드는 문법
 - 클래스의 재사용(재활용)
 - 프로그램의 유연성(추가 수정 삭제 ~ )을 증대 시키기 위해서 사용된다
 
 - 상속시 주의 사항
   1. 아무리 자식이더라도 부모의 private 멤버는 접근 불가
   2. 자식클래스에서 부모클래스를 명시한다

 - 형식
  - class 자식클래스명(부모클래스명) :
      코드정의

 

class Info:

    count = 0

    def __init__(self,name = None,age = 0) -> None:
        print("부모 생성자 호출")
        Info.count+=1
        self.__name = name 
        self.set_age(age)
        #self.__age = age

    #setter
    def set_age(self,age):
        if age < 1:
            print("나이를 잘못입력하셨습니다.")
            self.__age = 1
            return
        self.__age = age
 
    #getter
    def get_age(self):
        return self.__age

    @property
    def name(self):
        return self.__name

    @name.setter
    def name(self,name:str):
        if name.__len__() < 2:
            print("이름은 두글자 이상입니다.")
            return
        self.__name = name

    def setData(self,name,age):
        self.__name = name
        self.set_age(age)

    def disp(self) -> None:
        print("번호 : {}".format(Info.count))
        print("이름 : {}".format(self.__name))
        print("나이 : {}".format(self.__age))
    
    @classmethod
    def create(cls):
        return Info()

    # def __str__(self) -> str:
    #     return "이름 : {}".format(self.__name) + "\n나이 : {}".format(self.__age)

    def __del__(self):
        print("부모 소멸자 호출")
        Info.count-=1


class NewInfo(Info):

    # 자식클래스 객체가 생성될 때
    # 자동으로 부모클래스의 생성자가 호출된다
    # 부모클래스의 멤버변수의 값을 초기화 하려면 자식클래스에서 함께 받아주어야 한다
    # 부모클래스의 멤버변수값을 초기화하기 위해 부모클래스의 생성자를 함께 호출해 주어야 한다

    # super - 부모 , self - 자식
    # super - 부모의 인스턴스 공간을 컨트롤하는 클래스

    def __init__(self, name=None, age=0, height=0.0) -> None:
        super().__init__(name, age) # 제일 위에 적는 것을 권장한다
        print("자식 생성자 호출")
        # self.__name = name
        # self.__age = age
        self.__height = height

    def set_height(self,height):
        self.__height = height
    
    def get_height(self):
        return self.__height

    #메소드의 오버라이드
    # - 메소드의 재정의
    # - 코드의 일부분을 수정하려 할 때 사용되는 구문
    # - 객체 상황상 맞지 않는 부분을 수정하여야 할 때 사용한다

    def disp(self) -> None:
        super().disp()
        # print("번호 : {}".format(Info.count))
        # print("이름 : {}".format(self.name))
        # print("나이 : {}".format(self.get_age()))
        print("키 : {}".format(self.__height))


a = NewInfo("김코딩",20,177.4)


a.disp()

print(Info.count)

'PYTHON' 카테고리의 다른 글

[PYTHON] 추상클래스  (0) 2023.07.05
[PYTHON] 바인딩과 다형성  (0) 2023.07.05
[PYTHON] 클래스(소멸자)  (0) 2023.07.04
[PYTHON] 클래스(Class)  (0) 2023.07.03
[PYTHON] 디폴트 매개변수  (0) 2023.07.03