簡體   English   中英

面向對象的 Python - 使用類和函數的矩形

[英]Object Oriented Python - rectangle using classes and functions

我正在用 Python 創建一個程序,它將利用面向對象的編程來打印給定矩形的屬性。 該項目具有以下限制條件:

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

  • 一次只添加一項功能
  • 您可能需要注釋掉主要功能的部分以進行測試
  • 構造函數應采用 0、1 或 2 個參數(說明多態性)
  • 你的類應該是某個東西的子類(說明繼承)
  • 你的類應該有方法和屬性(說明封裝)
  • 隱藏您的實例變量(使用 __ 技巧)
  • 為每個實例變量添加 setter 和 getter 方法
  • 使用屬性封裝實例變量訪問
  • 並非所有實例變量都是真實的...有些是派生的,應該是只寫的
  • 您可能不會大幅更改主要功能(除非您正在進行黑帶挑戰)
  • 確保在需要時添加所需的代碼以運行主函數

這是標題

  • 代碼:main()函數相對不變3
  • 代碼:矩形類聲明為默認值,因此它支持 0、1 和 2 參數 3
  • 代碼:實例化 Rectangle(5,7) 2
  • 代碼:實例化 Rectangle() 2
  • 代碼:Rectangle類定義__實例變量2
  • 代碼:為每個實例變量定義getter和setter 2
  • 代碼:矩形類包括面積和周長方法 4
  • 代碼:矩形類繼承自某物,即使它是對象 2
  • 代碼:矩形類定義寬度和長度屬性 4
  • 代碼:矩形包含派生的只讀實例變量 2
  • 代碼:當python文件作為main 2執行時調用main
  • 代碼: Rectangle 類定義了返回字符串 4 的 getStats() 方法
  • 執行:打印 Rectangle a: 1
  • 執行:打印面積:35 1
  • 執行:打印周長:24 1
  • 執行:打印 Rectangle 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

不確定我的問題是否正確,但您可能想嘗試:

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())

注意:這個作業是我計算機科學課上的一個精確的作業。 雖然歡迎您從堆棧溢出等網站獲得幫助,但您仍需對自己的工作負責,如果您從該網站上交代碼(可能會或可能不會被接受)我們會知道,我們會認為它是學術性的不當行為。 我們也可能對作業進行了一些悄悄的更改,因此如果您不經仔細考慮就提交此答案,即使您也不太可能獲得全部學分

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM