我有一个特定类的实例列表A.我希望在print(A)
时更改返回的内容。
A = [MyClass(i) for i in range(10)]
print(A)
[<__main__.MyClass at 0x7f286808a2b0>,
<__main__.MyClass at 0x7f286808a320>,
<__main__.MyClass at 0x7f286808a780>,
<__main__.MyClass at 0x7f286808a7f0>,
<__main__.MyClass at 0x7f286808a860>,
<__main__.MyClass at 0x7f286808a710>,
<__main__.MyClass at 0x7f286808a940>,
<__main__.MyClass at 0x7f286808a8d0>,
<__main__.MyClass at 0x7f286808ada0>,
<__main__.MyClass at 0x7f286808ad30>]
我宁愿回复像
这样的东西['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
我该怎么做?
答案 0 :(得分:1)
您想要的是更改对象的默认表示。这是通过实施__repr__
函数来完成的。
class MyClass(object):
def __init__(self, i):
self.i = i
def __repr__(self):
return str(self.i)
>>> A = [MyClass(i) for i in range(3)]
>>> print A
[0, 1, 2]
当您在对象上调用print
时,该对象将执行__str__
。由于A
是一个列表(容器),容器会执行每个对象__repr__
函数。
答案 1 :(得分:1)
您需要在__repr__
中定义MyClass
方法,获取以下内容:
class MyClass():
def __init__(self, i):
self.i = i
def __repr__(self):
return str(self.i)
print([MyClass(i) for i in range(3)]) # prints '[0, 1, 2]'
答案 2 :(得分:1)
如果这是针对孤立的任务,您可以将参数作为列表推导的一部分进行检索:
class MyClass(object):
def __init__(self, var):
self.var = var
A = [MyClass(i) for i in range(10)]
print([x.var for x in A])
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
否则,作为demonstrated by @Vinny,您可以在班级中添加__repr__
方法。