2017-05-30 13 views
-1

任務是定義名爲'Shape'的類及其子類'Square'。 Square類有一個'init'函數,它將給定的長度作爲參數。這兩個類都有一個區域功能,可以打印形狀的區域,其中Shape的區域默認爲0。不確定如何使用python中的子類和超類完成此任務

這是我的時刻:

class Shape: 
    area = 0 
    def __init__(self, ??): 



class Square(Shape): 

    def __init__(self, length): 
     self.length = length 

    def area(self): 
     a = (self.length * self.length) 
     print('The area of a square with a side length of %f is %f' % (self.length, a)) 


s = Square(2) 
s.area() 

我不確定在外形超要做什麼。

+1

在我看來像形狀應該是一個抽象類。如果是這樣的話,它可以定義抽象區域方法,然後在子類中提供實現。 – MeterLongCat

+0

我認爲在超類中有一個'print_area(self)'方法是可取的,它只打印字段區域並在子類的__init__方法中初始化它,並且沒有覆蓋函數來打印子類中的區域。 – Chris

+2

_「這兩個類都有區域功能」_' area = 0'不是函數。你可以先解決這個問題。 –

回答

0

我想你想覆蓋Shape類中的默認功能area。然後,當你有一個形狀列表 - 一些Shape,一些Square,甚至可能是一些Polygon,你可以打電話area,而不知道它是哪一類。多態性!

class Shape: 
    def __init__(self): 
     pass 

    def area(self): 
     print(0) 

創建子類的實例時調用超類的構造函數也很重要。對於超類的內部結構可能有一些必要的啓動:

class Square: 
    def __init__(self, length): 
     self.length = length 
     super(Square, self).__init__()