更改python对象中的打印功能

时间:2018-04-08 14:32:30

标签: python python-3.x oop

我有一个特定类的实例列表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']

我该怎么做?

3 个答案:

答案 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__方法。