상속(inheritance)
: 상속은 무언가를 물려받는다는 뜻입니다. 그래서 클래스 상속은 물려받은 기능을 유지한채로 다른 기능을 추가할 때 사용하는 기능입니다.
기반 클래스 -> 파생 클래스
● 기능을 물려주는 클래스(기반클래스) -> 부모 클래스(parent class), 슈퍼 클래스(super class)
● 상속을 받아 새롭게 만드는 클래스(파생클래스) -> 자식 클래스(child class), 서브 클래스(sub class)
- 아무 멤버를 정의하지 않아도 기반 클래스의 모든 것을 물려받아 갖게 됩니다.
단, privat 멤버(__로 시작되는 이름을 갖는 멤버)는 제외합니다.
- 상속의 기본 형태
class 기반클래스이름:
코드
class 파생클래스이름(기반클래스이름):
코드
클래스 상속은 다음과 같이 클래스를 만들 때 ( )(괄호)를 붙이고 안에 기반 클래스 이름을 넣습니다.
console
1. < 다형성 > - 상속이라는 개념하에 가능
console
2. < 상속 - 데이터 속성 주의 >
데이터 속성(field) 상속(명시적으로 표현해 주어야 함) - field 는 생성자가 호출이 되는 순간, 할당됩니다.
console
error : message는 A의 __init__() 메서드 안에서 생성되는데, B의 인스턴스를 생성하면서 B.__init__()만 호출하고, A.__inint__() 메서드는 호출되지 않기 때문입니다.
* java - 상속에서 자식의 생성자 안에서는 부모의 생성자까지 생성되도록 super 사용
해결점 -> 부모 클래스의 생성자를 자식 클래스에서 명시
console
- 부모 클래스가 변경이 되면 부모 생성자도 변경해줘야하는 변거로움이 생깁니다.
< 부모 클래스를 대신해주는 super() 사용 >
상속 – super()
: 부모클래스의 객체 역할을 하는 프록시(Proxy)를 반환하는 내장 함수
console
< 자식 클래스에 생성자가 없을 때>
console
자녀 클래스가 별도 생성자를 생성하지 않으면 default로 생성자를 만들어줍니다.
def __init__(self):
super.__init__(self)
3. < 다중 상속 >
: 자식클래스 하나가 여러 부모 클래스로부터 상속받는 것입니다.
- 기본 형태
class A:
pass
class B:
pass
class C:
pass
class D(A,B,C): # 다중 상속
pass
- 다중 상속시 주의 사항 - 죽음의 다이아몬드
console
- 가까운것을 먼저 가져옵니다.
- 다중상속은 개수가 많아지고 복잡해지면 개념 자체가 모호해 지기 때문에 권장하지 않습니다.
4. < 오버라이딩(Overriding) >
: 부모클래스로 부터 상속받은 메서드를 다시 자식 클래스에 정의하는 것.
console
- 부모의 method ride 까지 함께 출력
: super( ) - 활용 하여 출력
console
5. < 데코레이터 >
: 함수를 꾸미는 객체.
__call__() 메서드를 구현하는 클래스
객체를 함수 호출 방식으로 사용하게 만드는 마법 메서드.
console
- 데코레이터 사용 용도(생성자)
console
: 참조변수를 함수를 호출하듯 괄호( )를 넣어주면 등록되었던 함수를 호출해준다.
- @decorator
console
6. < for문 순회 가능 객체 만들기 > - iterator
console
- Iterator 와 순회 가능한 객체
console
- range() 함수와 같은 일을 하는 클래스 정의
- 제너레이터(Generator)
console
위의 동일 기능 정의
console
7. < 상속의 조건 : 추상 기반 클래스 >
- 자식 클래스가 갖춰야 할 특징(메서드)을 강제하는 기능.
- 강제 조건 규약에 따르지 않으면 TypeError 예외 발생.
- metaclass=ABCMeta 클래스와 @abstractmethod 데코레이터를 이용.
console
- 추상 메서드가 존재하는데 오버라이딩 하지 않아서 error를 냅니다.
해결점)
자녀 클래스에서 추상 메서드를 오버라딩해서 사용.
console
'Anaconda > Python' 카테고리의 다른 글
[Python] SQLite 연동 (0) | 2020.07.30 |
---|---|
[Python] 파일 입출력 (0) | 2020.07.30 |
[Python] 클래스(Class - 객체지향) (0) | 2020.07.28 |
[Python] 파이참(PyCharm) 다운로드 (0) | 2020.07.28 |
[Python] 모듈(Module) & 패키지(Package) - in PyCharm (0) | 2020.07.28 |