1

我有一个对象列表。我正在尝试使用Python 最新版本中内置的字符串格式化功能来输出列表中对象的有意义的表示形式,从而揭示一些实例变量。我正在使用 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函数来做到这一点,还是比这更复杂?

4

2 回答 2

5

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

class CustomClass:
     def __str__: 
         return "whatever"
     def __repr__:
         return str(self)
于 2013-05-16T19:14:14.440 回答
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)
于 2013-05-16T19:14:25.387 回答