2015-04-12 5 views
3

Я написал эту программу, чтобы узнать основы ООП. Когда я запускаю эту программу из IDLE в Python Shell, она не показывает никаких ошибок, но также ничего не печатает ... Я не уверен, как разобраться в моих ошибках.В оболочке Python нет ошибок, но программа не запускается

Вот мой код:

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

Вот что делает Shell, если вы хотите посмотреть: http://imgur.com/DxyUZyY

Что я делаю неправильно и как я могу это исправить?

+0

Это не будет работать: Защиту __init __ (самость, площадь, периметр): Формы .__ INIT __ (самость, длина, ширина) –

ответ

1

Вы никогда не называете главную функцию. В отличие от C, где функция main будет автоматически выполняться, в python вы должны явно вызвать ее; main не имеет особого значения и является еще одной функцией в 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
    • length, width не определены здесь.
+0

О господи, спасибо так много! Когда я это сделал, у меня появилось несколько ошибок. Любая идея о том, как я могу их исправить? Traceback (самый последний вызов последнего): Файл "C: /Rectangle.py", строка 55, в главной() Файл "C: /Rectangle.py", строка 44, в главном а = Rectangle (5 , 7) Файл «C: /Rectangle.py», строка 27, в __init__ Формы.__init __ (self, length, width) NameError: имя 'length' не определено –

+0

@JosephWagner Проверьте изменения моего ответа. Формат для SO - это один вопрос за сообщение, поэтому я не думаю, что я могу ответить на другие последующие вопросы. Не забудьте [принять ответ] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work), если это помогло, чтобы отметить это как разрешенное :) –

Смежные вопросы