As we know in Python 3 print()
is a function, is it possible to create a decorated version of it wrapped under json.dumps(indent=4)
for ex.
Calling print(mydict)
should produce the same result as print(json.dumps(mydict, indent=4))
As we know in Python 3 print()
is a function, is it possible to create a decorated version of it wrapped under json.dumps(indent=4)
for ex.
Calling print(mydict)
should produce the same result as print(json.dumps(mydict, indent=4))
Aside from BrenBarn's answer(accepted), posting another gist here by @Adam Smith
No, it's not possible since
print
is a builtin function and it's not even a builtin C-level class. This answer provides a way to subclass a builtin object like astr
and apply a decorator to one of it's methods.Alternatively, take a look at pprint. https://docs.python.org/3/library/pprint.html
You don't need a decorator per se to do that. Just define a new function and call it
print
:You can use the
builtins
module as shown to access the original print function.The thing is that doing this doesn't really gain anything over calling your new function something besides
print
, except it will confuse people.If you want to really confuse people you could store
old_print = builtins.print
, define your new function asmy_print
(accessing the original asold_print
) and then dobuiltins.print = my_print
. Then your modifiedprint
will actually replace the regularprint
, even in other modules that know nothing about your shenanigans. But that is an even worse idea.