Python 从OrderedDict继承时如何覆盖_urepr__u?

Python 从OrderedDict继承时如何覆盖_urepr__u?,python,inheritance,ordereddictionary,Python,Inheritance,Ordereddictionary,在交互式shell中工作时,我试图实现漂亮的分析结果(IPython)。这是某种映射,顺序对我来说也很重要,因此我尝试从orderedict继承并重写\uuu repr\uu方法,但这种方法不起作用。最低测试示例: In[1]: from collections import OrderedDict In[2]: class Result(OrderedDict): def __repr__(self): if self.keys()

在交互式shell中工作时,我试图实现漂亮的分析结果(
IPython
)。这是某种映射,顺序对我来说也很重要,因此我尝试从
orderedict
继承并重写
\uuu repr\uu
方法,但这种方法不起作用。最低测试示例:

 In[1]: from collections import OrderedDict

 In[2]: class Result(OrderedDict):
            def __repr__(self):
                if self.keys():
                    report = []
                    for k, v in self.items():
                        report.append(k.ljust(10) + ': ' + repr(v))
                    return "\n".join(report)
                else:
                    return self.__class__.__name__ + "()"

 In[3]: res = Result()
        res['all'] = 10
        res['some'] = 11
        res
Out[3]: Result([('all', 10), ('some', 11)])
但是当我从
dict
类结果(dict):
)继承时,这种方法按预期工作,结果如下:

Out[3]: all       : 10
        some      : 11
但订单并不能保证。我不知道,为什么第一种方法不起作用

编辑:
Python 3.6.1

IPython 6.0.0

您的
\uuuu repr\uuuu
很好,但IPython漂亮的打印机正在覆盖它。您可以显式打印
repr

print repr(your_object)
或者禁用IPython的漂亮打印:

# Toggles pretty-printing.
%pprint

IPython有一些“魔力”,它使用自己漂亮的打印机,而不是默认的
\uuuuu repr\uuuu
。您可以使用
%pprint off
关闭此功能,然后您的
\uuu repr\uu
将正常工作。您还可以尝试覆盖
\u repr\u pretty
,如前所述。您的代码在IPython之外已经可以正常工作了

我无法重现您的结果。我无法在python 2.7中重现-您使用的是什么版本?看起来问题只出现在IPython中。
IPython
shell对我来说是一个永久性的工具。我甚至不知道问题的根源在哪里。非常感谢。