提问人:DMSBrian 提问时间:3/21/2023 最后编辑:DMSBrian 更新时间:3/21/2023 访问量:170
在 Python 中,如何打印自定义数据结构对象,例如。熊猫有吗?
In Python, how to print a custom data structure object, in a way that eg. Pandas does?
问:
我正在为自定义数据结构创建一个类,我希望它模仿 pandas 数据帧对象的行为。我想以 Pandas 的方式可视化我的对象 - 只需打印对象本身。当您创建一个 pandas 数据帧对象时,可以很容易地使用漂亮的格式打印它:
>>> import pandas as pd
>>> df = pd.DataFrame([1,2,3],[1,2,3])
>>> print(df)
0
1 1
2 2
3 3
我假设这隐式访问了某些属性或调用了某些方法,该方法以某种方式打印所述属性。我知道存在一个方法,它可以在调用时返回一个字符串,但是 pd。DataFrame 似乎没有实现此方法,或者至少我无法在源代码中找到它 - 那么它是如何做到的呢?__str__
如果我使用 ,我当然可以将数据结构的行连接为字符串,变成一个带有新行的长字符串并返回它。我还可以返回一个空字符串(因为不能返回 None),并在 .__str__
__str__
__str__
这两种解决方案都有效,但它们似乎都有点奇怪/违反直觉。也许有更好的方法可以做到这一点,类似于 Pandas 等图书馆的处理方式?在这方面是否有已知的标准或最佳实践?
编辑:
可能相关的问题 - 当调用时,相同的过程如何在 Jupyter Notebooks 中发生?由于它不是简单地打印它,而是以一种格式良好的方式显示它 - 我将如何为我的对象定义这种行为?df
答:
根据 @chepner、@0x5453 和 @azro 的评论汇编的答案:
生成字符串并返回它是执行此操作的预期方法。
方式 pd.DataFrame 通过定义方法来处理它。这是可能的,因为如果未明确定义,则用作 的回退。__repr__
__repr__
__str__
__str__
对编辑的回答:
当涉及到 IPython/Jupyter 笔记本中的可视化时,使用了不同的方法 - 。_repr_html_
评论
pd.DataFrame
定义__repr__
,而不是 .__str__
__repr__
__repr__
也是 If No other is defined 使用的回退。我怀疑其基本原理是数据帧主要用于查询,而不是显示,因此用于为调试提供可视化表示。object.__str__
__str__
Dataframe
__repr__