【问题标题】:Custom string formatting for a list of objects对象列表的自定义字符串格式
【发布时间】:2013-05-11 19:46:25
【问题描述】:

我有一个对象列表。我正在尝试使用 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 函数来做到这一点,还是比这更复杂?

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

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

如果您没有定义__str__,而是定义__repr__,那么每当Python 试图找到对象的str 时,__repr__ 将被用来代替__str__。因此,如果您不想定义两者,则不必同时定义。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多