Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 意外语法错误OOP_Python_Class_Oop_Syntax Error - Fatal编程技术网

Python 意外语法错误OOP

Python 意外语法错误OOP,python,class,oop,syntax-error,Python,Class,Oop,Syntax Error,我目前正在为Python编写一个作业,涉及三个类:矩形、画布和点。当我尝试将第二个矩形设置为已设置的矩形时,出现语法错误: >>> 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(

我目前正在为Python编写一个作业,涉及三个类:矩形、画布和点。当我尝试将第二个矩形设置为已设置的矩形时,出现语法错误:

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

谁能告诉我我做错了什么吗

你的
\uuuu repr\uuuu
方法很好用。出错的地方是将结果传递给
eval()
函数

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

删除
eval()
调用,您不需要它来显示方法的结果<代码>r2=报告(r1)有效

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

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

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

为什么要尝试解释
repr()
作为Python代码输出?我也这么想!!但是我们所说的这一行是老师给我们的,它必须使用这一行,有什么想法吗???@MatteoColombi:我不知道你的老师希望
\uuuuu repr\uu
方法返回什么。也许您需要返回一些实际上可以作为Python代码执行的东西?例如,返回字符串
'Rectangle(Point(),Point(1,1),“red”)
,该字符串可执行以再次复制同一对象。但我看不到你的家庭作业,也看不到你的老师一直在教你什么。我也不确定,但她给了我们行r2=eval(repr(r1)),并期望它将r2设置为r1,但在我的函数中,它说当我将该行放入shell时,出现语法错误
def __repr__(self):
    return 'Rectangle({!r}, {!r}, {!r})'.format(self.p1, self.p2, self.color)