AboutPython

[파이썬] 추상클래스

scone 2022. 5. 4. 10:24

[추상클래스]

  • 상위 클래스에서 하위 클래스에 메서드 구현을 강요한다.
    자식 클래스라면 특정 메소드는 꼭 해야만해!

비행기는 여객기가 flight() 기능을 갖도록 선언합니다.

여객기는 flight() 기능을 갖게되고, 갖지 않을 경우 오류가 발생합니다.

 

  • 부모가 자녀에게 방청소를 시켰다고 합시다.
    1. abc 패키지로 부터, ABCMetaabstrctmethod를 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() 기능을 오버라이딩하여, '자녀 방' 으로 수정할 수 있겠끔 하는 것입니다.