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 在他的评论中指出的错误,以及更多。
您当前的代码有很多问题,这里列出了其中的一些问题:
object.__init__(self)
什么都不做
self.setWidth(width)
调用方法,但 setWidth
方法试图设置一个尚未声明的变量。
因此需要更正为
def setWidth(self, width):
if (width <= 0):
width = 5
else:
width = width # and not self.width
以上对setLength
也是成立的。
- 由于您使用这些方法来设置和获取值,因此您应该考虑使用
@property
。
Shapes.__init__(self, length, width)
不是正确的调用。
- 你需要调查一下
super
length
,width
这里没有定义。
我写这个程序是为了学习 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 在他的评论中指出的错误,以及更多。
您当前的代码有很多问题,这里列出了其中的一些问题:
object.__init__(self)
什么都不做self.setWidth(width)
调用方法,但setWidth
方法试图设置一个尚未声明的变量。因此需要更正为
def setWidth(self, width): if (width <= 0): width = 5 else: width = width # and not self.width
以上对
setLength
也是成立的。- 由于您使用这些方法来设置和获取值,因此您应该考虑使用
@property
。 Shapes.__init__(self, length, width)
不是正确的调用。- 你需要调查一下
super
length
,width
这里没有定义。
- 你需要调查一下