对象列表的自定义字符串格式

时间:2013-05-16 19:10:47

标签: python string python-3.x string-formatting

我有一个对象列表。我试图在列表中输出有意义的对象表示,使用最近版本的Python中内置的string formatting capability来显示一些实例变量。我使用的是Python 3.3.0。

我在类中为列表中的对象定义了一个__str__方法。如果我尝试打印单个对象,我会得到__str__方法返回的表示。但是,如果我尝试打印整个列表,我会得到通用表示,就像我没有定义__str__方法一样。这是一个例子:

class CustomClass:
    def __init__(self):
        self.instanceVar = 42

    def __str__(self):
        return "{} (instanceVar = {})".format(self.__class__.__name__, self.instanceVar)

testObject = CustomClass()

print("{}".format(testObject))
# CustomClass (instanceVar = 42)

print("{}".format([testObject]))
# [<__main__.CustomClass object at 0x1006cbed0>]

如何获取第二个打印语句以打印[CustomClass (instanceVar = 42)]之类的内容?是否可以通过将正确的格式字符串传递给print函数来实现这一点,还是比它更复杂?

2 个答案:

答案 0 :(得分:5)

你需要定义我相信的__repr__方法

class CustomClass:
     def __str__: 
         return "whatever"
     def __repr__:
         return str(self)

答案 1 :(得分:3)

打印列表时,您将获得列表中repr个对象。 因此,要获得所需的格式,请定义__repr__方法。

如果您没有定义__str__,而是定义__repr__,那么只要Python试图找到__repr__,就会使用__str__代替str对象。因此,如果您不想,则不必定义两者。

class CustomClass:
    def __init__(self):
        self.instanceVar = 42

    def __repr__(self):
        return "{} (instanceVar = {})".format(self.__class__.__name__, self.instanceVar)