Python:如何覆盖打印(dict)输出?

时间:2017-06-29 23:04:58

标签: python dictionary formatting

我有一个字典和一个打印声明如下:

d = {'ar':4, 'ma':4, 'family':pf.Normal()}
print(d)

哪个给了我

{'ar': 4, 'ma': 4, 'family': <pyflux.families.normal.Normal object at 0x11b6bc198>}

有没有办法清理“家庭”的价值?关键?重要的是,通话仍然只是打印(d)&#39;因为它曾用于打印其他没有此问题的词典。这可能吗?谢谢你的时间。

编辑:

感谢答案的人,我会将其标记为正确,但我还没有尝试过,无法确认。我最后创建了另一个字典,清理后的字符串作为键,对象作为值。这是一个更多的工作,但我在阅读/得到答案之前做了这些,所以我只是坚持它。谢谢!

2 个答案:

答案 0 :(得分:4)

你错了。您不想更改print(dict)输出。这需要改变内置字典的打印方式。您想为自己的__repr__()对象添加自定义pf.Normal()

I believe pf.Normal() comes from the pyflux package,所以我建议看看该类假设要保留哪些数据,并通过继承该类来完成打印:

class CustomNormalObject(pf.Normal):
    def __repr__(self):
        # Add pretty printed data here
        pass

或者,如果您需要将自己的参数传递到自定义类,则可以使用super()

class CustomNormalObject(pf.Normal):
    def __init__(self, myparm, *args, **kwargs):
        # If using Python 3, you can call super without
        # passing in any arguments. This is simply for Python 2
        # compatibility.
        super(CustomNormalObject, self).__init__(*args, **kwargs)
        self.myparm = myparm

    def __repr__(self):
        # Add pretty printed data here
        pass

答案 1 :(得分:2)

因为我认为pyflux是一个外部库,我认为你不应该直接编辑它。执行所需操作的简便方法是覆盖__str__类的__repr__Normal方法。

pyflux.families.normal.Normal.__str__ = lambda self: "Clean up value here."

这里我使用lambda函数进行说明,但当然可以使用已定义的函数。