클래스의 상속 예제 관련 질문

조회수 722회

다음 코드가 동작하도록 자전차 클래스를 정의하세요. 단 자전차 클래스는 차 클래스를 상속받습니다.

bicycle = 자전차(2, 100)

bicycle.가격

100

이 문제의 답안은

class 차:

    def __init__(self, 바퀴, 가격):
        self.바퀴=바퀴
        self.가격=가격

class 자전차(차):

    def __inif__(self, 바퀴, 가격):
        self.바퀴=바퀴
        self.가격=가격

인데, 여기서 상속받은 클래스 자전차가 왜 다시 self.바퀴와 self 가격을 받는지 알고 싶습니다. 그냥

class 차:

    def __init__(self, 바퀴, 가격):
        self.바퀴=바퀴
        self.가격=가격

class 자전차(차):

    def __inif__(self):
        print(self.가격)

이렇게 하면 안되는건지 궁금합니다.

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    파이썬의 class에서 self.XXX 형태로 선언하는 것들은 인스턴스 변수에 해당합니다.

    해당 클래스의 인스턴스가 생성되었을 때 동일한 클래스의 다른 인스턴스들과 무관하게 그 인스턴스가 고유하게 갖는 변수입니다.

    이 변수는 미리 정해진 값이 아니고 전달받는 값에 따라 정해지는 값입니다.

    작성하신 코드를 보면 라는 클래스는 인스턴스를 선언할 때 바퀴와 가격에 해당하는 값들을 매개변수로 받아서 각각을 인스턴스 변수로 저장하고 있습니다.

    클래스를 상속받아서 새로운 클래스를 만들었는데 매개변수를 전달하지 않으면 당연히 그 매개변수를 받아 값을 저장하는 부분을 수행할 수 없게 되고, 자연히 값을 불러오는 코드 역시 수행할 수 없게 됩니다.

    대신 상속받은 클래스의 __init__이 하는 일을 굳이 반복해서 쓰지 않아도 아래와 같은 방법으로 동일한 과정을 수행할 수 있습니다.

    class 차:
        def __init__(self, 바퀴, 가격):
            self.바퀴=바퀴
            self.가격=가격
    
    class 자전차(차):
        def __inif__(self, 바퀴, 가격):
            super(자전차, self).__init__(바퀴, 가격)
    
    • 즉, 상속받는 클래스인 자전차에서 다시 인스턴트 변수를 받게 만들어 주지 않으면, 실행되는 것은 "차" 클래스에 입력된 변수를 바탕으로 하는 것이기에, "자전차" 클래스에 적용되는 변수를 입력받을 수 있게 만들어 주어야 한다는 말씀이신가요? Hin 2021.8.7 15:50
    • 클래스 상속에서 __init__을 선언하지 않고 그 외의 다른 method만 선언한다면 부모 클래스의 __init__을 그대로 상속받기는 합니다. 하지만 일반적으로는 __init__을 새로 선언해주거나 __init__ 안에서 super를 사용해 주어야 합니다. 올려주신 코드의 경우 두 클래스가 하는 일은 완전히 동일한데, 아무것도 오버라이딩 하지 않으면 클래스를 선언할 수 없기 때문에 __init__을 반복해서 적어준 것 아닌가 싶습니다. 적절한 비유인지는 모르겠습니다만 중고등학교 체육시간에 멀리뛰기 같은 걸 한다고 했을 때 뛰는 것 자체는 앞 학생과 똑같이 하면 되지만 뛰기 전에 본인 이름을 말해야 하는 것과 비슷하다고 할 수 있겠네요. 뛰는 것 자체는 각 클래스가 하는 일이라고 한다면 각자의 이름이 인스턴스 변수에 해당한다고 생각하시면 됩니다. HIAOAIH 2021.8.9 09:47
    • 답변해 주셔서 감사합니다. Hin 2021.8.9 15:52

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)