意外的语法错误OOP

时间:2015-12-05 17:17:42

标签: python class oop syntax-error

我目前正在为Python工作,涉及三个类:Rectangle,Canvas和Point。当我尝试将第二个矩形设置为等于已设置的矩形时,我收到语法错误:

>>> r1 = Rectangle(Point(), Point(1,1), "red")
>>> r2=eval(repr(r1))
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    r2=eval(repr(r1))
  File "<string>", line 1
    I am a red rectangle with bottom left corner at (0, 0) and top right corner at (1, 1).
       ^
SyntaxError: invalid syntax

这是它似乎遇到问题的功能:

def __repr__(self):
    return 'I am a '+str(self.color)+' rectangle with bottom left corner at '+str(self.p1.get())+' and top right corner at '+str(self.p2.get())+'.'

谁能告诉我这里做错了什么

1 个答案:

答案 0 :(得分:0)

您的__repr__方法运行正常。出错的地方是将结果传递给eval()函数。

eval()接受一个字符串输入并将其作为Python代码执行。您的__repr__方法不会返回Python代码,而是返回英语语句。

删除eval()电话,您不需要它来显示您的方法的结果。 r2 = repr(r1)有效。

如果您希望生成一个允许重新创建对象的有效Python表达式,则需要从__repr__方法返回这样的表达式:

def __repr__(self):
    return 'Rectangle({!r}, {!r}, {!r})'.format(self.p1, self.p2, self.color)

!r告诉str.format()获取对象的repr()值,因此对于Point类,您还需要生成类似的__repr__返回可以重新创建这些对象的字符串的方法。