import json from abc import abstractmethod from abc import ABC from enums import ShapeColor import math class Shape(ABC): color = ShapeColor.Unknown @abstractmethod def area(self): pass @abstractmethod def perimetr(self): pass @staticmethod def convert_to_json(obj): if isinstance(obj, Shape): result = obj.__dict__ result["type"] = obj.__class__.__name__ result['color'] = obj.color.value return result def safe_read (shape_type, property, default_value): if property in shape_type: return shape_type[property] return default_value class Rectangle(Shape): def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height def perimetr(self): return (self.width + self.height) * 2 class Square(Shape): def __init__(self, side): self.side = side def area(self): return self.side ** 2 def perimetr(self): return 4 * self.side class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return math.pi * (self.radius ** 2) def perimetr(self): return 2 * math.pi * self.radius r1 = Rectangle(10, 20) s1 = Square(22) c1 = Circle(10)