我正在用Python创建一个程序,它将利用面向对象的编程来打印给定矩形的属性。该项目有这些限制:
本实验的目的是让您练习创建自己的实践 宾语。您将获得一个期望实例的主函数 (尚未定义的)Rectangle对象。你的工作是确定什么 Rectangle类需要的属性和方法,并创建一个类 这将满足要求。
- 一次只添加一项功能
- 您可能需要注释掉部分主要功能以进行测试
- 构造函数应该使用0,1或2个参数(说明多态)
- 你的类应该是某个东西的子类(说明继承)
- 您的课程应该有方法和属性(说明封装)
- 隐藏实例变量(使用__技巧)
- 为每个实例变量添加setter和getter方法
- 使用属性封装实例变量访问
- 并非所有实例变量都是真实的......有些是派生的,应该是只写的
- 你可能不会大幅改变主要功能(除非你正在进行黑带挑战)
- 确保在需要时添加所需的代码以运行主要功能
这是标题
得分40
我从这个代码开始:
def main():
print "Rectangle a:"
a = Rectangle(5, 7)
print "area: %d" % a.area
print "perimeter: %d" % a.perimeter
print ""
print "Rectangle b:"
b = Rectangle()
b.width = 10
b.height = 20
print b.getStats()
我应该得到这个输出:
Rectangle a:
area: 35
perimeter: 24
Rectangle b:
width: 10
height: 20
area: 200
perimeter: 60
我已经走到这一步但我无法通过Rectangle B来打印宽度和高度你能看一下吗?
class Rectangle:
def __init__(self, width=0, height=0):
self.width = width
self.height = height
def area(self):
return self.width * self.height
def perimeter(self):
return 2 * self.height + 2 * self.width
def setWidth(self, width):
self.width = width
def setHeight(self, height):
self.height = height
def getStats(self):
return "area: %s\nperimeter: %s" % (self.area(), self.perimeter())
def main():
print ""
print "Rectangle a:"
a = Rectangle(5, 7)
print "area: %s" % a.area()
print "perimeter: %s" % a.perimeter()
print ""
print "Rectangle b:"
b = Rectangle()
b.width = 10
b.height = 20
print b.getStats()
print ""
main()
我目前正在获得此输出:
Rectangle a:
area: 35
perimeter: 24
Rectangle b:
area: 200
perimeter: 60
Process finished with exit code 0
答案 0 :(得分:0)
不确定我的问题是否正确,但您可能想尝试:
def getStats(self):
return "width: %s\nheight: %s\narea: %s\nperimeter: %s" % (self.width, self.height, self.area(), self.perimeter())
为了满足要求4和6,我建议如下:
class Shape(object):
def area(self):
raise NotImplementedError
def perimeter(self):
raise NotImplementedError
class Rectangle(Shape):
def __init__(self, width=0, height=0):
super(Rectangle, self).__init__() # this is useless in this case, but it's good practice
self.width = width
self.height = height
def area(self):
return self.width * self.height
def perimeter(self):
return 2 * self.height + 2 * self.width
@property
def width(self):
return self.__width
@property
def height(self):
return self.__height
@width.setter
def width(self, width):
self.__width = width
@height.setter
def height(self, height):
self.__height = height
def getStats(self):
return "width: %s\nheight: %s\narea: %s\nperimeter: %s" % (self.width, self.height, self.area(), self.perimeter())
答案 1 :(得分:0)
注意:这个作业是我计算机科学课的精确作业。虽然欢迎您从堆栈溢出等网站获得帮助,但您仍然对自己的工作负责,如果您从本网站上交代码(可能接受也可能不接受)我们会知道,我们会认为它是学术性的不当行为。我们也可能对作业进行了一些安静的修改,所以如果你在没有仔细考虑的情况下回答这个问题,你甚至不可能得到完全的信用