본문 바로가기
Python

[파이썬] 상속

by AI미남홀란드 2021. 1. 23.
728x90

상속(inheritance)
하위 클래스가 상위 클래스의 모든 것을 물려받은 것

상속의 목적

  1. 여러 클래스들에 공통된 요소들을 상위 클래스를 만들어서 제공(중복제거)
  2. 제공되는 클래스의 기능이 부족해서 기능 확장을 위해서

-> 간단한 프로그램을 만들 때는 상속을 잘 사용하지 않습니다.

-> 상속을 하는 방법

Class 자신의클래스이름(상위 클래스 이름을 나열)

 

-> 파이썬은 다중 상속을 지원

-> 파이썬은 동적메모리를 할당을 사용한다.

(선언만 해서는 파이썬은 메모리 할당을 하지 않습니다)

상위 클래스의 속성을 하위 클래스에서 사용하고자 할 때는 하위 클래스의 __init__() 에서 super().__init__()을 호출해서 상위클래스의

객체(인스턴스)를 만들어야 한다.

* 항상 클래스를 만들면 인스턴스를 만들어서 써야한다

class base:
          def __init__(self):
                 self.name='아담'
          def display(self):
                print(self.name)
# 어떤 일을 해주는 것을 검색
# base 클래스의 display라는 함수가 그 일을 해준다
help(base.__init__) <-- 항상 먼저 확인 도움말을 확인한다
#base 클래스의 인스턴스 생성
base= Base()
#help(base.display)
base.display()

class Derived(Base):

    def __init__(self,bunho):

        '''

 

        Parameters

        ----------

        self.bunho : TYPE

            DESCRIPTION.

 

        Returns

        -------

        None.

 

        '''

        #상위 클래스에 속성이 있을때는 반드시 호출 해야한다.

        super().__init__()        

        self.bunho=bunho

   

derived=Derived(1) #임의의 값으르 지정해줘야 한다 번호

derived.method()

결과 : 상속을 받아서 derived에서도 출력되는 모습을 볼 수 있다.

 

=> method overriding(메소드 재정의) *****(객체 지향에서 중요함)

 

상위 클래스에 존재하는 메소드를 하위 클래스에서 다시 만드는 것

상위 클래스의 메소드가 기능이 부족하거나 추상 메소드인 경우 내용을 추가하기 위해서 사용합니다.

 

면접에서 많이 물어본다고 하네요

 

추상 메소드가 아닌 경우에는 상위 클래스의 메소드를 호출하고 기능을 추가해야 합니다. 

 

위의 문장에서 

def method(self): 

       super().method() # ******요렇게 슈퍼를 통해 호출을 해주어야 기능이 추가가 된다.

       print(self.bunho)

 

결과 adam smith 

         (1) 

출력 결과물을 볼 수 있다.

 

-> 파이썬은 다중 상속을 지원합니다

여러 개의 클래스로부터 상속을 받을 수 있습니다.

유지보수를 급하게 할 때를 제외하고는 추천하지 않습니다.

 

728x90

'Python' 카테고리의 다른 글

[파이썬] 파이썬의 정리  (0) 2021.01.23
[파이썬] 추상*****  (0) 2021.01.23
[파이썬] 상속  (0) 2021.01.17
[파이썬] 클래스 객체 지향 프로그래밍  (0) 2021.01.17
[파이썬] 객체지향 프로그래밍  (0) 2021.01.16