import json from abc import abstractmethod from abc import ABC import math class Shape(ABC): color = '' @abstractmethod def area(self): pass @abstractmethod def perimetr(self): pass @staticmethod def create_shape(json): if "type" in json: shape_type = json["type"] if shape_type == "circle": return Circle(json["radius"]) elif shape_type == "square": return Square(json["side"]) elif shape_type == "rectangle": return Rectangle(json["width"], json["height"]) else: raise TypeError(f'Неизвестная фигура {shape_type}') @staticmethod def convert_to_json(obj): if isinstance(obj, Shape): result = obj.__dict__ result["type"] = obj.__class__.__name__ return json.dumps(result) 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)