확장으로는 자유롭고 수정으로는 폐쇄되어있음.
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod #파이썬의 추상클래스를 위한 데코레이션
def calculator(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def calculator(self):
return 3.14159 * (self.radius ** 2)
class Calc:
def __init__(self):
pass
def calculator(self, shape: Shape):
return shape.calculator() # Shape 인터페이스의 calculator 메소드 호출
# 사용 예
circle = Circle(5)
calc = Calc()
area = calc.calculator(circle)
print("Circle area:", area)
해당 코드는 계산하는 클래스에 calculator_circle 이런식으로 계속해서 추가하는것이 아닌 Shape를 상속받은 도형 클래스의 추상클래스를 호출함으로써
확장을 보장하고 수정에서 폐쇄적인 구조를 가지게됨.
다른 도형은 Shape를 상속받에 calculator를 구현하기만 하면 됨