ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python 문법 기초 29 - 추상 클래스(추상 메소드)
    Python 2022. 10. 22. 17:12

     

    추상클래스는 자식 클래스에서 부모의 메소드의 이름을 강요하도록 하기 위해 사용한다. 그 이유는 다형성을 구사하기 위해서이다.

     

    # 추상 클래스 (추상 메소드)
    # 자식 클래스에서 부모의 메소드의 이름을 강요하도록 하기 위해 사용
    
    from abc import *
    
    class AbstractClass(metaclass = ABCMeta): # 추상 클래스가 된다.
        @abstractmethod
        def myMethod(self): # 추상 메소드가 됨
            pass
        
        def normalMethod(self):
            print('추상 클래스는 일반 메소드를 가질 수도 있다.')
            
    # parent = AbstractClass() Can't instantiate abstract class
    
    class Child1(AbstractClass):
        name = '난 Child1'
        
    c1 = Child1()
    print(c1.name)
    c1.myMethod()
    c1.normalMethod()
    
    
    <console>
    난 Child1
    Child1에서 추상 메소드에 내용을 적음
    추상 클래스는 일반 메소드를 가질 수도 있다.

    java와 다르게 파이썬에서는 추상 클래스에서 일반 메소드를 가질 수 있다.

    추상 클래스를 부모 클래스로 가져와놓고 override를 하지 않으면 err가 발생한다.

    추상 메소드에는 무조건 @abstractmethod를 위에 붙여야된다.

     

    class Child2(AbstractClass):
        def myMethod(self): # 추상 메소드가 됨
            print('Child2에서 추상의 마법을 풀다.')
            print('이제는 자유다')
        
        def normalMethod(self):
            print('추상 클래스의 일반 메소드는 오버라이딩이 선택적이다.')
            
        def good(self):
            print('Child2 고유 메소드')
            
    c2 = Child2()
    c2.myMethod()
    c2.normalMethod()
    c2.good()
    
    
    <console>
    Child2에서 추상의 마법을 풀다.
    이제는 자유다
    추상 클래스의 일반 메소드는 오버라이딩이 선택적이다.
    Child2 고유 메소드

     

    imsi = c1
    imsi.myMethod()
    print()
    imsi = c2
    imsi.myMethod()
    
    
    <console>
    Child1에서 추상 메소드에 내용을 적음
    
    Child2에서 추상의 마법을 풀다.
    이제는 자유다

    같은 함수를 호출하지만 값이 다르다. 다양성을 추구하기 위해 추상 메소드를 사용한다.

     

    댓글

Designed by Tistory.