python - 如何让 .__repr__() 正常工作?
问题描述
我想__repr__
在 Python 中使用,所以我可以按照我想要的方式查看表示,如下所示。
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)
,它应该返回'Polynomial(1,2,3)'
,而不是像<__main__.Polynomial at 0x219eb9f52c8>
。但它仍然返回那些没有信息的东西。我哪里做错了?
解决方案
您有多个问题:
- 您的缩进不正确,
__repr__
应该是您班级的方法。它目前是您方法的内部__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]))
推荐阅读
- r - 如何使用 R 聚类大约 9000 个数字序列?
- c++ - 模板 constexpr 推导
- android - react-navigation 3 抽屉行为问题
- google-apps-script - Google Apps 脚本 - 需要帮助过滤 OR 条件
- javascript - 如何从离子侧菜单推送的页面向后滑动?
- laravel - 具有护照验证和错误处理的 API
- java - Run long java processes on demand with AWS
- mysql - 基于其他表的 MS SQL 不同结果
- java - 第一个 Imageviews 和原始重复和变化太快
- android - 如何使用 android studio 中的 json 数据在 listview 中创建列?