Practice makes perfect

[Python] 상속(inheritance) 본문

Anaconda/Python

[Python] 상속(inheritance)

kerpect 2020. 7. 29. 13:20

상속(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