如何让 .__repr__() 正常工作?
How do I get .__repr__() to work correctly?
我想在 Python 中使用 __repr__
,因此我可以按照我希望的方式查看表示,如下所示。
class Polynomial:
def __init__(self, *args):
self.args = args
def __repr__(self):
Repr = "Polynomial("
for i in args:
if i == 0:
Repr = Repr + str(self.args[i])
else:
Repr = Repr + ", "+ str(self.args[i])
return Repr
所以如果我输入 Polynomial(1,2,3)
,它应该 return 'Polynomial(1,2,3)'
,而不是 <__main__.Polynomial at 0x219eb9f52c8>
。但它仍然是 return 那些无意义的东西。我哪里做错了?
您有多个问题:
- 你的缩进不正确,
__repr__
应该是你的class的一个方法。它目前是您的 __init__
方法的内部方法。
- 您正在迭代
args
但您正在尝试使用 i
就好像它是索引(它是实际的 arg)
- 您可以使用
.join()
轻松地将列表转换为逗号分隔的字符串。
这是您的方法的有效实现:
class Polynomial:
def __init__(self, *args):
self.args = args
def __repr__(self):
Repr = "Polynomial("
for i in range(len(self.args)):
if i == 0:
Repr = Repr + str(self.args[i])
else:
Repr = Repr + ", "+ str(self.args[i])
Repr += ")"
return Repr
这是一种更精简的方法,它使用字符串格式和 .join()
::
class Polynomial:
def __init__(self, *args):
self.args = args
def __repr__(self):
return "Polynomial({})".format(", ".join([str(arg) for arg in self.args]))
这是修复您的一些拼写错误后的解决方案 code.But 我建议您对字符串使用 f-strings 和一个 liner expression representation.The 使用一个 liner 和 f-strings 更好在@Selcuk 回答中解释
class Polynomial:
def __init__(self, *args):
self.args = list(args)
def __repr__(self):
Repr = "Polynomial("
for i,j in enumerate(self.args):
if i == 0:
Repr = Repr + str(j)
else:
Repr = Repr + ", "+ str(j)
return Repr + ")"
我想在 Python 中使用 __repr__
,因此我可以按照我希望的方式查看表示,如下所示。
class Polynomial:
def __init__(self, *args):
self.args = args
def __repr__(self):
Repr = "Polynomial("
for i in args:
if i == 0:
Repr = Repr + str(self.args[i])
else:
Repr = Repr + ", "+ str(self.args[i])
return Repr
所以如果我输入 Polynomial(1,2,3)
,它应该 return 'Polynomial(1,2,3)'
,而不是 <__main__.Polynomial at 0x219eb9f52c8>
。但它仍然是 return 那些无意义的东西。我哪里做错了?
您有多个问题:
- 你的缩进不正确,
__repr__
应该是你的class的一个方法。它目前是您的__init__
方法的内部方法。 - 您正在迭代
args
但您正在尝试使用i
就好像它是索引(它是实际的 arg) - 您可以使用
.join()
轻松地将列表转换为逗号分隔的字符串。
这是您的方法的有效实现:
class Polynomial:
def __init__(self, *args):
self.args = args
def __repr__(self):
Repr = "Polynomial("
for i in range(len(self.args)):
if i == 0:
Repr = Repr + str(self.args[i])
else:
Repr = Repr + ", "+ str(self.args[i])
Repr += ")"
return Repr
这是一种更精简的方法,它使用字符串格式和 .join()
::
class Polynomial:
def __init__(self, *args):
self.args = args
def __repr__(self):
return "Polynomial({})".format(", ".join([str(arg) for arg in self.args]))
这是修复您的一些拼写错误后的解决方案 code.But 我建议您对字符串使用 f-strings 和一个 liner expression representation.The 使用一个 liner 和 f-strings 更好在@Selcuk 回答中解释
class Polynomial:
def __init__(self, *args):
self.args = list(args)
def __repr__(self):
Repr = "Polynomial("
for i,j in enumerate(self.args):
if i == 0:
Repr = Repr + str(j)
else:
Repr = Repr + ", "+ str(j)
return Repr + ")"