Σχεδόν το έκανες. Τον υπολογισμό του εμβαδού, μπορείς να τον κάνεις κατευθείαν στην Quadrilateral, και οι υπόλοιπες κλάσεις θα τον κάνουν όταν καλείς την super().
class Quadrilateral:
def __init__(self,x1,y1,x2,y2,x3,y3,x4,y4):
self.x1=x1
self.x2=x2
self.x3=x3
self.x4=x4
self.y1=y1
self.y2=y2
self.y3=y3
self.y4=y4
# calculate area from coordinates
# http://www.mathopenref.com/coordpolygonarea.html
self.area = (x1 * y2 - y1 * x2) + (x2 * y3 - y2 * x3) + (x3 * y4 - y3 * x4) + (x4 * y1 - y4 * x1)
class Trapezoid(Quadrilateral):
def __init__(self,x1,y1,x2,y2,x3,y3,x4,y4):
super(Trapezoid, self).__init__(self,x1,y1,x2,y2,x3,y3,x4,y4)
class Parallelogram(Quadrilateral):
def __init__(self,x1,y1,x2,y2,x3,y3,x4,y4):
super(Parallelogram, self).__init__(self,x1,y1,x2,y2,x3,y3,x4,y4)
class Rectangle(Quadrilateral):
def __init__(self,x1,y1,x2,y2,x3,y3,x4,y4):
super(Rectangle, self).__init__(self,x1,y1,x2,y2,x3,y3,x4,y4)
class Square(Quadrilateral):
def __init__(self,x1,y1,x2,y2,x3,y3,x4,y4):
super(Square, self).__init__(self,x1,y1,x2,y2,x3,y3,x4,y4)
tr=Trapezoid(-1,2,4,5,7,9,4,6)
pa=Parallelogram(4,6,8,9,4,5,6,7)
re=Rectangle(1,9,5,4,6,7,8,9)
sq=Square(1,2,7,3,-9,9,5,9)
print("Trapezoid area: ", tr.area)
print("Parallelogram area: ", pa.area)
print("Rectangle area: ", re.area)
print("Square area: ", sq.area)