为何修改pandas DataFrame的__repr__方法无法改变其显示效果?
动态修改
__repr__方法的差异现象 最近发现一个有意思的情况:修改自定义类的__repr__方法,不管是在类定义里直接写,还是后续动态赋值,都能正常改变实例的输出;但对Pandas的DataFrame类做同样的动态赋值操作,在Jupyter笔记本里却完全没效果,具体测试如下:
测试1:自定义类A(直接定义__repr__)
class A: def __init__(self): pass def __repr__(self): return "abc" a = A() a # 输出结果:abc
测试2:自定义类B(动态赋值__repr__)
class B: def __init__(self): pass B.__repr__ = lambda x: "hi" b = B() b # 输出结果:hi
测试3:Pandas DataFrame(Jupyter中动态赋值无效)
import pandas as pd pd.DataFrame.__repr__ = lambda x: "hi" df = pd.DataFrame({'a': [1,2], 'b': [3,4]}) df # 输出仍是默认表格: # a b # 0 1 3 # 1 2 4
补充说明
注意:该动态赋值操作在Python原生REPL中是有效的,上述无效的情况仅出现在Jupyter笔记本环境中。至于为什么在Jupyter里无效,属于另一个需要单独探讨的问题。
内容的提问来源于stack exchange,提问作者extremeaxe5
相关产品推荐
相关产品推荐

