지구정복
[Python] 상속 본문
1. 상속이란
1. 개념
기본 클래스의 공통 기능(속성과 메소드)을 물려받아서 사용하는 것이고, 다른 기능을 추가하거나 기존 기능을
변경할 수 있다.
이때 기본 클래스를 부모 클래스 또는 상위 클래스라고 부르고
기본 클래스를 물려받은 클래스를 자식 클래스 또는 하위 클래스라고 부른다.
2. 장단점
장점
- 기존에 작성된 클래스를 재활용
- 자식 클래스 설계시 중복되는 속성을 미리 부모클래스에 작성하면 자식클래스에서 정의하지 않아도 됨
- 클래스 간의 계층적 관계를 구성하여 다형성의 문법적 토대를 마련
단점
- 상위 클래스에 버그가 생기거나 기능의 추가/변경 등으로 변화가 있을 경우 하위클래스들이 정상적으로 작동할지에 대한 예측이 어려움
- 상위 클래스에서 의미 있었던 기능이 하위 클래스에서는 의미없는 기능일 수 있다.
- 상위클래스나 하위클래스에 기능이 많이 추가되어 규모가 커지면 점점더 복잡해지고 일관성이 사라짐
2. 파이썬에서 상속 사용하기
1. 사용법
부모 클래스를 자식 클래스 인자로 넣으면 상속이 된다.

상속을 받으면 부모클래스의 생성자도 자식클래스에서 다시 작성해줘야 한다.
상속관계 확인하는 메서드

클래스와 객체 관계 확인하는 메서드

3. 메서드 재정의(Method Override)
1. 개념
상속받은 부모 클래스의 method를 자식클래스에서 입맛에 맞게 재정의하는 것을 의미한다.
이렇게 부모클래스의 method를 재정의한 자식클래스로 객체를 만들고 해당 method를 실행하면
재정의된 메소드가 실행된다.
2. 사용

또한 자식클래스에 메서드를 추가할 수 있다.

4. 자식 클래스에서 부모 클래스 메서드 호출(super, self)
1. super
자식클래스에서 부모클래스의 메서드 호출할 때 사용한다.
super().부모클래스메서드명

2. self
self는 현재 자기 자신의 객체를 나타낸다.
다른 언어에서는 this라는 키워드를 사용한다.

5. 자식 클래스에서 부모 클래스 메서드 확장
부모 클래스 메서드 기능에 추가적인 기능이 필요한 경우가 있다.
이럴 경우 두 가지 방법이 있다.
1. 부모 클래스 메서드는 그대로 이용하면서 자식 클래스 메서드에서 필요한 기능만 정의
2. 해당 메서드에서 상속받은 부모 클래스명.메서드명 을 호출하고, 필요한 기능을 추가하여 정의
2번을 살펴보면 아래와 같다.

6. 추상 클래스 사용
1. 개념
메서드 안에 구체적인 내용을 작성되지 않고 메서드 이름만을 가진 클래스이다. 이를 추상메서드라고 한다.
상속받는 자식 클래스에서 해당 메서드의 구체적인 내용이 구현되어야 한다.
예시: '사람' 클래스에 '먹는다' 라는 메서드명만 정의하고
이를 구현하는 '학생' 자식클래스에서 '먹는다'메서드의 내용을 '급식을 먹는다.'로 구현한다.
2. 사용법
abc 라이브러리를 import시킨다. ( from abc import * )
클래스 선언시 () 괄호 안에 metaclass=ABCMeta를 작성한다.
추상클래스에서 메서드 선언시 추상메서드 임을 명시하기 위해 @abstractmethod 라고 작성한다.
이때 pass는 메서드의 내용이 없다는 것을 의미한다.


한가지 주의할점은 추상클래스는 객체를 만들 수 없다는 것이다.
추상 클래스를 사용하려면 이를 상속받는 자식클래스에서 추상클래스를 구현하고 이 자식클래스로 객체를
만들고 사용해야 한다.
출처
www.fun-coding.org/PL&OOP1-6.html
'데이터 엔지니어링 정복 > Python' 카테고리의 다른 글
[Python] 3/3 | 기본문법 (0) | 2021.03.03 |
---|---|
[Python] 3/2 | 이클립스에서 pydev 사용하기 (0) | 2021.03.02 |
[Python] colab에서 구글드라이브에 있는 파일 import하기 (0) | 2021.02.20 |
[Python] public, private, protected (0) | 2021.02.19 |
[Python] 객체지향 프로그래밍 (0) | 2021.02.18 |