在Node.js中,当我想快速检查某个值而不是退出调试器并单步调试时,我会快速添加一个console.log(foo),并得到一个漂亮的:
{
lemmons: "pie",
number: 9,
fetch: function(){..}
elements: {
fire: 99.9
}
}
非常清楚!在Python中,我得到了以下代码:
class LinkedList:
head = None
tail = None
lemmons = 99
<__main__.LinkedList instance at 0x105989f80>
或用vars()
,{}
或者用dir()
表示,['_LinkedList__Node', '__doc__', '__module__', 'append', 'get_tail', 'head', 'lemmons', 'remove', 'tail']
讨厌!看看这些废话--我以为python应该是快速、漂亮和干净的呢?人们真的是这样做的吗?他们为所有事情实现客户str和自定义repr吗?因为这看起来也有点疯狂。
3条答案
按热度按时间rdlzhqv91#
你可以用很多不同的方式打印你的对象和Python类,这里有一个简单的方法:
我建议你从熟悉str and repr操作符开始。无论如何,这只是一个小例子,使用python有很多方法可以漂亮地打印对象和类
jgovgodb2#
我们期望您实现自己的
__str__
方法,以便选择在诊断中记录的重要内容。但是,可以使用几行代码以“漂亮”格式记录整个对象字典。例如:
这将返回如下所示的内容(取决于您拥有的数据量和
width
约束):2ekbmq323#
为了解释上面的答案,主要是解释str的那个。Pythonrepr()函数返回字符串格式的对象表示。当repr()“str的超类”函数在对象上被调用时,这个方法被调用。如果可能,返回的字符串应该是一个有效的Python表达式,可以用来重新构造对象。
如果您在任何对象中很好地实现此方法,这将使日志增强10倍