상속(inheritance)
하위 클래스가 상위 클래스의 모든 것을 물려받은 것
상속의 목적
- 여러 클래스들에 공통된 요소들을 상위 클래스를 만들어서 제공(중복제거)
- 제공되는 클래스의 기능이 부족해서 기능 확장을 위해서
-> 간단한 프로그램을 만들 때는 상속을 잘 사용하지 않습니다.
-> 상속을 하는 방법
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)
출력 결과물을 볼 수 있다.
-> 파이썬은 다중 상속을 지원합니다
여러 개의 클래스로부터 상속을 받을 수 있습니다.
유지보수를 급하게 할 때를 제외하고는 추천하지 않습니다.
'Python' 카테고리의 다른 글
[파이썬] 파이썬의 정리 (0) | 2021.01.23 |
---|---|
[파이썬] 추상***** (0) | 2021.01.23 |
[파이썬] 상속 (0) | 2021.01.17 |
[파이썬] 클래스 객체 지향 프로그래밍 (0) | 2021.01.17 |
[파이썬] 객체지향 프로그래밍 (0) | 2021.01.16 |