gpt4 book ai didi

python - PrettyPrint 与可变映射

转载 作者:行者123 更新时间:2023-12-01 06:35:07 24 4
gpt4 key购买 nike

我的项目中有一个嵌套字典,它是通过 PrettyPrint 打印的(只需将嵌套字典扔进去即可)。

但是这个嵌套的字典必须被嵌套的 MutableMapping 对象替换,因为我需要覆盖一些 MagicMethods。但因为它现在是一个对象,所以它只是取出第一个键并打印出来,该值是一个 my_dict 对象。

现在如何使用 PrettyPrint 这样一个具有 dict 属性的 MutableMapping 对象?

class my_dict(collections.abc.MutableMapping):
def __init__(self):
print("dict was created")
self.d = dict() # var where I want to store my key/values

def __setitem__(self, key, value):
# do sth else
print("Dict Element was set: Key:\t{}, Value:\t{}".format(key, value))
self.d[key] = value
return

def __getitem__(self, key):
# do sth else
print("Item was requested")
return self.d[key]

def __delitem__(self, key):
del self.d[key]

def __iter__(self):
return self.d.__iter__()

def __len__(self):
return len(self.d)

def sd(self, k, d):
if k not in self:
self[k] = d
return self[k]

我使用的是 Python 3.6。

最佳答案

pprint 只是格式化由 __repr__ 返回的字符串,并打印它。将以下 dunder 方法添加到您的类中。

def __repr__(self):
return self.d.__repr__()

已编辑

from pprint import PrettyPrinter
PrettyPrinter._dispatch[my_dict.__repr__] = PrettyPrinter._pprint_dict

pprint 将打印,就像使用内部 dict self.d 调用它一样。 PrettyPrinter 有一个名为 _dispatch 的内部字典,它映射 class.__repr__ => pprint_method。所以你必须为你的类添加一个 pprint 方法。在本例中,我将 my_dict.__repr__ 映射到 dict 的 pprint 方法,因此 pprintmy_dict 对象格式化为如果它们是听写的话。

pprint 源代码是纯Python here .

关于python - PrettyPrint 与可变映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59707352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com