【问题标题】:Python shell shows no error but program doesn't runPython shell 没有显示错误,但程序没有运行
【发布时间】:2015-04-12 17:49:37
【问题描述】:

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

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

【问题讨论】:

  • 这行不通:def __init__(self, area, perimeter): Shapes.__init__(self, length, width)

标签: python class shell oop inheritance


【解决方案1】:

你永远不会调用主函数。与 C 中的 main 函数会自动执行不同,在 python 中,您必须显式调用它; main 没有任何特殊意义,只是 python 中的另一个函数。

所以在你的代码的最后,写:

main()

一旦你运行它,你会看到像@Eric在他的cmets中指出的错误,等等。


您当前的代码有很多问题,这里列出了其中的一些:

  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 此处未定义。

【讨论】:

  • 天哪,非常感谢!当我这样做时,我遇到了一些错误。关于如何修复它们的任何想法?回溯(最后一次调用):文件“C:/Rectangle.py”,第 55 行,在 main() 文件“C:/Rectangle.py”,第 44 行,在 main a = Rectangle(5, 7 ) 文件“C:/Rectangle.py”,第 27 行,在 init Shapes.__init__(self, length, width) NameError: name 'length' is not defined
  • @JosephWagner 检查我的答案的编辑。 SO 的格式是每个帖子一个问题,所以我认为我无法回答更多的后续问题。如果有帮助,请不要忘记accept the answer,以便将其标记为已解决:)
最近更新 更多