繁体   English   中英

面向对象的 Python - 使用类和函数的矩形

[英]Object Oriented Python - rectangle using classes and functions

我正在用 Python 创建一个程序,它将利用面向对象的编程来打印给定矩形的属性。 该项目具有以下限制条件:

本实验的目的是让您练习创建自己的对象。 您将获得一个 main 函数,该函数需要一个(尚未定义的)Rectangle 对象的实例。 您的工作是确定 Rectangle 类需要哪些属性和方法,并创建一个满足要求的类。

  • 一次只添加一项功能
  • 您可能需要注释掉主要功能的部分以进行测试
  • 构造函数应采用 0、1 或 2 个参数(说明多态性)
  • 你的类应该是某个东西的子类(说明继承)
  • 你的类应该有方法和属性(说明封装)
  • 隐藏您的实例变量(使用 __ 技巧)
  • 为每个实例变量添加 setter 和 getter 方法
  • 使用属性封装实例变量访问
  • 并非所有实例变量都是真实的...有些是派生的,应该是只写的
  • 您可能不会大幅更改主要功能(除非您正在进行黑带挑战)
  • 确保在需要时添加所需的代码以运行主函数

这是标题

  • 代码:main()函数相对不变3
  • 代码:矩形类声明为默认值,因此它支持 0、1 和 2 参数 3
  • 代码:实例化 Rectangle(5,7) 2
  • 代码:实例化 Rectangle() 2
  • 代码:Rectangle类定义__实例变量2
  • 代码:为每个实例变量定义getter和setter 2
  • 代码:矩形类包括面积和周长方法 4
  • 代码:矩形类继承自某物,即使它是对象 2
  • 代码:矩形类定义宽度和长度属性 4
  • 代码:矩形包含派生的只读实例变量 2
  • 代码:当python文件作为main 2执行时调用main
  • 代码: Rectangle 类定义了返回字符串 4 的 getStats() 方法
  • 执行:打印 Rectangle a: 1
  • 执行:打印面积:35 1
  • 执行:打印周长:24 1
  • 执行:打印 Rectangle b: 1
  • 执行:打印宽度:10 1
  • 执行:打印高度:20 1
  • 执行:打印面积:200 1
  • 执行:打印周长:60 1

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

我已经走了这么远,但我无法让矩形 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

不确定我的问题是否正确,但您可能想尝试:

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())

注意:这个作业是我计算机科学课上的一个精确的作业。 虽然欢迎您从堆栈溢出等网站获得帮助,但您仍需对自己的工作负责,如果您从该网站上交代码(可能会或可能不会被接受)我们会知道,我们会认为它是学术性的不当行为。 我们也可能对作业进行了一些悄悄的更改,因此如果您不经仔细考虑就提交此答案,即使您也不太可能获得全部学分

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM