AboutPython
[파이썬] 추상클래스
scone
2022. 5. 4. 10:24
[추상클래스]
- 상위 클래스에서 하위 클래스에 메서드 구현을 강요한다.
자식 클래스라면 특정 메소드는 꼭 해야만해!
비행기는 여객기가 flight() 기능을 갖도록 선언합니다.
여객기는 flight() 기능을 갖게되고, 갖지 않을 경우 오류가 발생합니다.
- 부모가 자녀에게 방청소를 시켰다고 합시다.
1. abc 패키지로 부터, ABCMeta와 abstrctmethod를 import 합니다.
2. 부모 클래스(metaclass = ABCMeta) 를 함으로써 추상 클래스를 정의합니다.
3. 반드시 자식 클래스에게 구현할 기능이 있다면, 함수 정의 위에 @abstrctmethod를 추가합니다.
from abc import ABCMeta, abstractmethod
class Parent(metaclass=ABCMeta) :
def __init__(self):
pass
@abstractmethod
def clean(self):
print('부모 방 청소')
class Child(Parent):
def __init__(self):
super().__init__()
# def clean(self):
# print('자녀 방 청소')
child=Child()
child.clean()
'''
Traceback (most recent call last):
File "c:\Users\Jupiter\Desktop\mygit\LearnInZeroBase\파이썬 중급\17_추상클래스.py", line 14, in <module>
child=Child()
TypeError: Can't instantiate abstract class Child with abstract method clean
'''
다음과 같이 구현하라고 한 기능을 구현하지 않으면 객체가 만들어지지 않습니다.
- 구현하라고 한 기능을 제대로 구현하면
from abc import ABCMeta, abstractmethod
class Parent(metaclass=ABCMeta) :
def __init__(self):
pass
@abstractmethod
def clean(self):
print('부모 방 청소')
class Child(Parent):
def __init__(self):
super().__init__()
def clean(self):
print('자녀 방 청소')
child=Child()
child.clean()
'''
자녀 방 청소
'''
오류가 발생하지 않습니다.
- 추상클래스는 공통적인 기능을 쓸 때 각자 알아서 function을 수정하게끔 할 때 보통 씁니다.
가령 부모는 부모 방 청소를 하는데, 자녀들로 하여금 자기네 방을 청소하겠끔 시킬 때
clean() 기능을 오버라이딩하여, '자녀 방' 으로 수정할 수 있겠끔 하는 것입니다.