2015-06-20 153 views
-2

我正在Python中創建一個程序,它將利用面向對象編程來打印給定矩形的屬性。該項目有這些給定的限制:面向對象的Python - 使用類和函數的矩形

本實驗的目的是讓你練習創建自己的 對象。您將得到一個主函數,該函數需要一個 (尚未定義)Rectangle對象的實例。您的工作是確定矩形類所需的屬性和方法,並創建滿足要求的類 。

  • 一次只添加一個功能
  • 您可能需要註釋掉的主要功能部件進行測試
  • 構造應採取0,1,或2個參數(說明多態性)
  • 你類應該是某個東西的子類(說明繼承)
  • 你的類應該有方法和屬性(說明封裝)
  • 使你的實例變量隱藏(使用__技巧)
  • 每個實例變量
  • 使用屬性來封裝實例變量訪問
  • 添加setter和getter方法不是所有的實例變量是真實的...有些人得到的,而應該是隻寫
  • 你可能不顯着改變的主要功能(除非你做的挑戰黑帶)
  • 需要
  • 時,請務必添加所需的代碼運行的主要功能

這裏是欄目

  • 代碼:main()函數是相對不變3
  • 代碼:Rectangle類與默認值聲明所以它支持0,1和2參數3
  • 代碼:實例化矩形(5,7)2
  • 代碼:實例化矩形()2
  • 代碼:矩形類定義__實例變量2
  • 代碼:定義getter和setter方法對每個實例變量2
  • 代碼:Rectangle類包括的面積和周長方法4
  • 代碼:Rectangle類的東西繼承,即使它的對象2
  • 鱈魚E:矩形類定義的寬度和長度特性4
  • 代碼:矩形包括衍生只讀實例變量2
  • 代碼:當Python文件作爲主2
  • 代碼執行調用主:矩形類定義getStats( )方法返回字符串4
  • 執行:打印矩形A:1
  • 執行:打印面積:35 1
  • 執行:打印周長:24 1
  • 執行:打印矩形b:1
  • 執行:打印寬度:10 1
  • 執行:打印高度:20 1
  • 執行:打印面積:200 1
  • 執行:打印周長:60 1

分數40

我給這個代碼開始:

def main(): 
print "Rectangle a:" 
a = Rectangle(5, 7) 
print "area:  %d" % a.area 
print "perimeter: %d" % a.perimeter 

print "" 
print "Rectangle b:" 
b = Rectangle() 
b.width = 10 
b.height = 20 
print b.getStats() 

我應該得到這樣的輸出:

Rectangle a: 
area:  35 
perimeter: 24 
Rectangle b: 
width:  10 
height: 20 
area:  200 
perimeter: 60 

到目前爲止,我已經得到了這一點,但我不能讓矩形B到打印寬度和高度能否請您看看?

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

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

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

    def setWidth(self, width): 
     self.width = width 

    def setHeight(self, height): 
     self.height = height 

    def getStats(self): 
     return "area:  %s\nperimeter: %s" % (self.area(), self.perimeter()) 


def main(): 
    print "" 
    print "Rectangle a:" 
    a = Rectangle(5, 7) 
    print "area:  %s" % a.area() 
    print "perimeter: %s" % a.perimeter() 

    print "" 
    print "Rectangle b:" 
    b = Rectangle() 
    b.width = 10 
    b.height = 20 
    print b.getStats() 
    print "" 


main() 

我目前得到這個輸出:

Rectangle a: 
area:  35 
perimeter: 24 

Rectangle b: 
area:  200 
perimeter: 60 


Process finished with exit code 0 
+0

注意你還沒有完成要求4和6 –

回答

0

不知道我收到了你的問題的權利,但你可能也想嘗試:

def getStats(self): 
    return "width:  %s\nheight:  %s\narea:  %s\nperimeter: %s" % (self.width, self.height, self.area(), self.perimeter()) 

爲了滿足要求4和6,我會建議這樣的:

class Shape(object): 
    def area(self): 
     raise NotImplementedError 

    def perimeter(self): 
     raise NotImplementedError 

class Rectangle(Shape): 
    def __init__(self, width=0, height=0): 
     super(Rectangle, self).__init__() # this is useless in this case, but it's good practice 
     self.width = width 
     self.height = height 

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

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

    @property 
    def width(self): 
     return self.__width 

    @property 
    def height(self): 
     return self.__height 

    @width.setter 
    def width(self, width): 
     self.__width = width 

    @height.setter 
    def height(self, height): 
     self.__height = height 

    def getStats(self): 
     return "width:  %s\nheight:  %s\narea:  %s\nperimeter: %s" % (self.width, self.height, self.area(), self.perimeter()) 
+0

是的,這有助於。我現在得到正確的輸出,但我仍然沒有滿足要求4和6 – cbandara

+0

好的,我會編輯我的答案以涵蓋這些要點。 – poros

+0

我已經在我的答案中發佈了官方評論,如果這有助於 – cbandara

0

注意:這個作業是來自我的計算機科學課的確切作業。雖然您可以從像堆棧溢出網站得到幫助,你仍然負責自己的工作,如果你在代碼從該網站打開(這可能會或可能不會被接受),我們就知道了,我們會考慮它的學術不當行爲。我們也可能已經做出了分配一些安靜的變化,因此,如果你在沒有認真考慮把這個答案,你是不可能得到充分的信用甚至