我有一个数据结构,我想以人类和机器可读的形式打印出来。具体来说,我想打印它作为对构造函数的调用,如果将其解析为Python表达式,它将重建相同的对象。
数据结构可能不一致。 (除非程序有问题,否则它不会在这种不一致的状态下使用。)如果它不一致,我想把它打印出来作为一个建立一致对象的调用(我有一个明确定义的策略来解决不一致性)。但是,我在调试中使用了漂亮的打印,所以我想有一些方法来揭示不一致性。因此,对于不一致的对象,Python应该看到一个表达式来构造一致的对象,但人类应该看到不一致。
这是一个愚蠢的例子。 Sum
班级的sum
字段应为a
和b
的总和。如果不是,则假定sum
错误 - 但我希望在打印输出中看到错误的sum
值。
class Sum:
def __init__(self, a, b):
self.a = a
self.b = b
self.update()
def update(self):
self.sum = self.a + self.b
def __str__(self):
return 'Sum(%s, %s)%s' % \
(str(self.a), str(self.b),
'' if self.sum == self.a + self.b else ' # sum=' + str(self.sum))
演示:
>>> x = Sum(1, 2)
>>> str(x)
'Sum(1, 2)'
>>> x.a = 2
>>> str(x)
'Sum(2, 2) # sum=3'
这不好,因为Sum(2, 2) # sum=3
无法解析为更大表达式的一部分。我也不想依赖换行符,因为打印输出可以作为带有换行的文本复制。
我可以在构造函数中添加一个可选参数来构建一个不一致的对象,但它会很混乱。永远不应该在不一致的状态下创建对象。
我怎样才能打印出Python将解析但忽略的内容?