我目前正在为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())+'.'
谁能告诉我这里做错了什么
答案 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__
返回可以重新创建这些对象的字符串的方法。