5.5 הורשה פתרון

from abc import ABC, abstractmethod

class Drawable(ABC):
    @abstractmethod
    def draw(self):
        pass

class Shape(ABC):
    @abstractmethod
    def area(self):
        pass

    @abstractmethod
    def perimeter(self):
        pass

class Circle(Shape, Drawable):
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return 3.14 * self.radius ** 2

    def perimeter(self):
        return 2 * 3.14 * self.radius

    def draw(self):
        print("Drawing Circle")

class Rectangle(Shape, Drawable):
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

    def perimeter(self):
        return 2 * (self.width + self.height)

    def draw(self):
        print("Drawing Rectangle")

# Test the implementation
circle = Circle(5)
rectangle = Rectangle(4, 6)

print("Circle Area:", circle.area())  # Output: 78.5
print("Circle Perimeter:", circle.perimeter())  # Output: 31.4
circle.draw()  # Output: Drawing Circle

print("Rectangle Area:", rectangle.area())  # Output: 24
print("Rectangle Perimeter:", rectangle.perimeter())  # Output: 20
rectangle.draw()  # Output: Drawing Rectangle