hnc-eduard/HNS/Excercises/13082023 ДЗ по фигурам JSON/classes.py

85 lines
1.8 KiB
Python

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"].lower()
if shape_type == "circle":
radius = 'radius'
elif shape_type == "square":
side = 'side'
elif shape_type == "rectangle":
return Rectangle(json["width"], json["height"])
else:
raise TypeError(f'Неизвестная фигура {shape_type}')
shape_type.color = safe_read(json, "color", "unknown")
@staticmethod
def convert_to_json(obj):
if isinstance(obj, Shape):
result = obj.__dict__
result["type"] = obj.__class__.__name__
result['color'] = obj.color
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)