具有可变映射的 PrettyPrint
PrettyPrint with Mutable Mapping
我的项目中有一个嵌套字典,它是通过 PrettyPrint 打印的(只需将嵌套字典放入其中即可)。
但是这个嵌套的 dict 必须被嵌套的 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 方法添加到您的 class.
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
。所以你必须为你的 class 添加一个 pprint 方法。在这种情况下,我将 my_dict.__repr__
映射到 dict
的 pprint 方法,因此 pprint
将 my_dict
对象格式化为字典。
pprint
源代码是普通的 python here.
我的项目中有一个嵌套字典,它是通过 PrettyPrint 打印的(只需将嵌套字典放入其中即可)。
但是这个嵌套的 dict 必须被嵌套的 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 方法添加到您的 class.
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
。所以你必须为你的 class 添加一个 pprint 方法。在这种情况下,我将 my_dict.__repr__
映射到 dict
的 pprint 方法,因此 pprint
将 my_dict
对象格式化为字典。
pprint
源代码是普通的 python here.