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

Python shell shows no error but program doesn't run

我写这个程序是为了学习 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

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

你从不调用主函数。不像在 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这里没有定义。