__repr__ and __str__ suggestion
jrobbins-LiveData opened this issue · 2 comments
The current __repr__
function, while perfectly valid per the Python docs, could be made more informative by indicating that nested dict
s are actually also Box
objects. With a couple of small changes, as sketched below, that missing info could be made available, along with making the __repr__
output eval
able, which is also valid per the Python docs.
from box import Box
def main():
b1 = Box({'outer': {'k1': 'v1', 'inner': {'k2': 'v2'}}})
print(f"before new methods: {b1=}")
Box.__repr__ = lambda self: f"Box({self})"
Box.__str__ = lambda self: f"{ {k:v for k,v in self.items()} }"
print(f" after new methods: {b1=}")
print(f"{eval(repr(b1))=}")
if __name__ == "__main__":
main()
before new methods: b1=<Box: {'outer': {'k1': 'v1', 'inner': {'k2': 'v2'}}}>
after new methods: b1=Box({'outer': Box({'k1': 'v1', 'inner': Box({'k2': 'v2'})})})
eval(repr(b1))=Box({'outer': Box({'k1': 'v1', 'inner': Box({'k2': 'v2'})})})
Correct code, instead of my quick and dirty monkey patch, should use self._box_config["box_class"]
instead of hardcoding Box
in the __repr__
function like I did.
Adding these features in 6.0, currently have a release candidate that can be installed and tested with:
pip install python-box[all]==6.0.0rc2 --upgrade
6.0 is ushering in Cython speedups on supported platforms, so please let me know if you run into any issues!
Box 6 has been released with this added, thanks for opening the issue!