개방폐쇄 원칙,

확장으로는 자유롭고 수정으로는 폐쇄되어있음.

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를 구현하기만 하면 됨