2015-04-12 141 views
3

我編寫了這個程序來學習OOP的基礎知識。當我在Python Shell中從IDLE運行該程序時,它不會顯示任何錯誤,但也不會顯示任何內容......我不知道如何確定我的錯誤。Python shell顯示沒有錯誤,但程序不運行

這裏是我的代碼:

class Shapes(object): 
    def __init__(self, width, length): 
     object.__init__(self) 
     self.setWidth(width) 
     self.setLength(length) 

    def getWidth(self): 
     return self.width 

    def setWidth(self, width): 
     if (width <= 0): 
      width = 5 
     else: 
      width = self.width 

    def getLength(self): 
     return self.length 

    def setLength(self, length): 
     if (length <= 0): 
      length = 10 
     else: 
      length = self.length 

class Rectangle(Shapes): 
    def __init__(self, area, perimeter): 
     Shapes.__init__(self, length, width) 

    def getArea(length, width): 
     return length * width 

    def getPerimeter(length, width): 
     return (length * 2) + (width * 2) 

    def getStats(self): 
     print("Area: {}".format(self.getArea())) 
     print("Perimeter: {}".format(self.getPerimeter())) 
     print("Length: {}".format(self.getLength())) 
     print("Width: {}".format(self.getWidth())) 


def main(): 
    print("Rectangle a: ") 
    a = Rectangle(5, 7) 
    print("Area:   {}".format(a.area)) 
    print("Perimeter:  {}".format(a.perimeter)) 

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

這裏是殼牌正在做什麼,如果你想看看: http://imgur.com/DxyUZyY

什麼我做錯了,我該如何糾正呢?

+0

這是行不通的: 高清__init __(自我,面積,周長): 形狀.__的init __(自我,長度,寬度) –

回答

1

你永遠不會調用主函數。不像在C中,main函數會自動執行,在python中,你必須明確地調用它;主要沒有什麼特別的意義,只是Python中的另一個功能。

因此,在你的代碼的末尾,寫:

main() 

一旦運行,你會看到這樣的錯誤@Eric在他的評論中指出,等等。


有很多事情錯了你當前的代碼,這裏是他們幾個人的名單:

  1. object.__init__(self)什麼都不做
  2. self.setWidth(width)調用該方法,但setWidth方法嘗試將其設置爲尚未聲明的變量。

    • 因此,這需要加以糾正,以

      def setWidth(self, width): 
          if (width <= 0): 
           width = 5 
          else: 
           width = width # and not self.width 
      
  3. 以上是setLength也是如此。

  4. 由於您正在使用這些方法來設置和獲取值,因此應該使用@property進行調查。
  5. Shapes.__init__(self, length, width)不是正確的調用。
    • 你需要尋找到super
    • lengthwidth,這裏不做定義。
+0

哦,我的天哪,非常感謝!我這樣做的時候遇到了一些錯誤。有關我如何修復它們的想法?回溯(最近調用最後一次): 文件「C:/Rectangle.py」,第55行,在 main() 文件「C:/Rectangle.py」,第44行,在主 a = Rectangle(5 ,7) 文件「C:/Rectangle.py」,第27行,在__init__中 形狀。__init __(self,length,width) NameError:name'length'未定義 –

+0

@JosephWagner檢查編輯我的答案。 SO的格式是每篇文章的一個問題,所以我認爲我不能回答更多的後續問題。如果有幫助,請不要忘記[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work),以便將此標記爲已解決:) –

相關問題