为什么我在实例化__repr__method时收到语法错误



当我使用repr方法实例化一个类时,我收到以下错误。

当我删除 repr 时,它工作正常:

已删除 REPR

class Wide():
def __init__(self,  XfromLeftEdge = 141.0, YfromTopEdge = 300.0, Width = 1551.0, Height = 800.0 ):
self.XfromLeftEdge =XfromLeftEdge
self.YfromTopEdge =YfromTopEdge
self.Width = Width
self.Height = Height
def objOne(self): #XfromLeftEdge, YfromTopEdge, Width, Height
return XfromLeftEdge, YfromTopEdge, Width, Height
a = Wide()
print(a)

返回:

<__main__.Wide object at 0x7faec1ed48b0>
(base) user SDNrig 6 % 

repr

class Wide():
def __init__(self,  XfromLeftEdge = 141.0, YfromTopEdge = 300.0, Width = 1551.0, Height = 800.0 ):
self.XfromLeftEdge =XfromLeftEdge
self.YfromTopEdge =YfromTopEdge
self.Width = Width
self.Height = Height
def objOne(self): #XfromLeftEdge, YfromTopEdge, Width, Height
return XfromLeftEdge, YfromTopEdge, Width, Height
def __repr__(self):
return '{}, {}, {}, {}'.format(self.XfromLeftEdge = XfromLeftEdge, self.YfromTopEdge = YfromTopEdge, self.Width = Width, self.Height = Height)
def __str__(self):
return 'instance object of wide ROI object, XfromLeftEdge:{}, YfromTopEdge: {}, Width: {}, Height: {}'.format(
self.XfromLeftEdge = XfromLeftEdge,
self.YfromTopEdge = YfromTopEdge,
self.Width = Width,
self.Height = Height)

a = Wide()
print(a)

返回

(base) user SDNrig 6 % /usr/local/bin/python3 "/Users/.../Desktop/SDNrig 6/play_f.py"
File "/Users/.../Desktop/SDNrig 6/play_f.py", line 15
return '{}, {}, {}, {}'.format(self.XfromLeftEdge = XfromLeftEdge, self.YfromTopEdge = YfromTopEdge, self.Width = Width, self.Height = Height)
^
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

期望的输出

我希望看到 print(a( 给出参数及其值。

格式字符串中不需要赋值。 使用这个:

class Wide():
def __init__(self,  XfromLeftEdge = 141.0, YfromTopEdge = 300.0, Width = 1551.0, Height = 800.0 ):
self.XfromLeftEdge =XfromLeftEdge
self.YfromTopEdge =YfromTopEdge
self.Width = Width
self.Height = Height
def objOne(self): #XfromLeftEdge, YfromTopEdge, Width, Height
return XfromLeftEdge, YfromTopEdge, Width, Height
def __repr__(self):
return f"Wide({self.XfromLeftEdge}, {self.YfromTopEdge}, {self.Width}, {self.Height})"
def __str__(self):
return f'instance object of wide ROI object, XfromLeftEdge:{self.XfromLeftEdge}, YfromTopEdge: {self.YfromTopEdge}, Width: {self.Width}, Height: {Self.Height}'

这也将使用 f 字符串语法以提高可读性

此代码将解决您的错误

class Wide():
def __init__(self,  XfromLeftEdge = 141.0, YfromTopEdge = 300.0, Width = 1551.0, Height = 800.0 ):
self.XfromLeftEdge =XfromLeftEdge
self.YfromTopEdge =YfromTopEdge
self.Width = Width
self.Height = Height
def objOne(self): #XfromLeftEdge, YfromTopEdge, Width, Height
return XfromLeftEdge, YfromTopEdge, Width, Height
def __repr__(self):
return '{}, {}, {}, {}'.format(self.XfromLeftEdg, self.YfromTopEdge, self.Width, self.Height)
def __str__(self):
return 'instance object of wide ROI object, XfromLeftEdge:{}, YfromTopEdge: {}, Width: {}, Height: {}'.format(
self.XfromLeftEdge,
self.YfromTopEdge,
self.Width,
self.Height)
a = Wide()
print(a)

class Wide():
def __init__(self,  XfromLeftEdge = 141.0, YfromTopEdge = 300.0, Width = 1551.0, Height = 800.0 ):
self.XfromLeftEdge =XfromLeftEdge
self.YfromTopEdge =YfromTopEdge
self.Width = Width
self.Height = Height
def objOne(self): #XfromLeftEdge, YfromTopEdge, Width, Height
return XfromLeftEdge, YfromTopEdge, Width, Height
def __repr__(self):
return '{XfromLeftEdg}, {YfromTopEdge}, {Width}, {Height}'.format(XfromLeftEdg = self.XfromLeftEdg, YfromTopEdge =self.YfromTopEdge, Width = self.Width, Height =self.Height)
def __str__(self):
return 'instance object of wide ROI object, XfromLeftEdge:{XfromLeftEdge}, YfromTopEdge: {YfromTopEdge}, Width: {Width}, Height: {Height}'.format(
XfromLeftEdge = self.XfromLeftEdge,
YfromTopEdge = self.YfromTopEdge,
Width = self.Width,
Height = self.Height)
a = Wide()
print(a)

问题在于,在reprstr方法的字符串中,{}没有键,而在格式方法内部,有一个键值对。
并且键和值的方向被交换了。

最新更新