Python shell没有显示错误,但程序没有运行

时间:2015-04-12 17:49:37

标签: python class shell oop inheritance

我写了这个程序来学习OOP的基础知识。当我在Python Shell中从IDLE运行这个程序时,它没有显示任何错误但也没有打印任何东西......我不知道如何弄清楚我的错误是什么。

这是我的代码:

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

我做错了什么,如何纠正?

1 个答案:

答案 0 :(得分: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