【问题标题】:Python Programming- Defining a ClassPython 编程 - 定义一个类
【发布时间】:2014-09-07 08:49:33
【问题描述】:

这就是问题所在,

定义类 Rectangle。它的构造函数采用一对代表左上角的数字,以及另外两个代表宽度和高度的数字。它有以下方法:

get_bottom_right() - 将右下角作为一对数字返回。 move(p) - 移动矩形,使 p 成为左上角(保持宽度和高度不变)。 resize(width, height) - 将矩形的宽度和高度设置为提供的参数(保持左上角不变)。 __str__() - 以一对对的形式返回矩形的字符串表示形式 - 即左上角和右下角。

注意:与您之前可能遇到的坐标系不同,在这个问题中,y 会随着您垂直向下移动而增加。

示例: 下面的每个示例都继承于前一个示例。 小心为 str 设置正确的间距 - 即逗号后跟空格。

r = Rectangle((2,3), 5, 7)

str(r)

*'((2, 3), (7, 10))'*

r.move((5,6))

str(r)

'((5, 6), (10, 13))'

r.resize(2,3)

str(r)

*'((5,6), (7, 9))'*

r.get_bottom_right()

*(7, 9)*

这是我的回答:

class Rectangle():

   def __init__(self, coords, sizex, sizey):
       self._startx, self._starty = coords
       self._sizex = sizex
       self._sizey = sizey
   def get_bottom_right(self):
       print '(%s, %s)' % (self._startx + self._sizex, self._starty + self._sizey)
   def move(self, pos):
       self._startx, self._starty = pos
   def resize(self, width, height):
       self._sizex = width
       self._sizey = height
   def __str__(self):
       return '((%s, %s), (%s, %s))' % (self._startx, self._starty, self._startx + self._sizex,   self._starty + self._sizey)

r = Rectangle((2, 3), 5, 7)

str(r)

r.move((5,6))

str(r)

r.resize(2,3)

str(r)

r.get_bottom_right()

我得到了正确的答案,但作业系统说我错了。

错误:Rectangle 类应该继承自对象类

谁能告诉我哪里错了?

【问题讨论】:

    标签: python class inheritance


    【解决方案1】:

    你正在寻找,

    class Rectangle(object):
    ...
    

    这是一个新式的类。在这篇 SO 帖子中阅读更多内容:What is the difference between old style and new style classes in Python?

    我也感觉你的作业系统正在使用pylint 来验证/评分你的代码。您可能想坚持PEP8 标准。

    【讨论】:

    • (object) 确实是新风格
    • 我已经改成了 Rectangle(object),但是为什么我的答案也变了。以前是 (7,9),现在是 (14,11)。发生了什么……
    • @bboychua 检查您是否错误地更改了数字?继承对象不会影响它。
    • 好吧,事情就是这样。如果我使用 Rectangle(),我得到 (7,9),如果我使用 Rectangle(object),我每次都会得到不同的答案。
    【解决方案2】:

    您的 Rectangle 类中的另一个错误是 get_bottom_right() 方法应该返回一个元组,打印它。当然,在解释器中返回一个元组而不分配它会导致它被打印出来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-12
      • 2012-01-02
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      相关资源
      最近更新 更多