Есть ли способ изменить способ объекта int
типа преобразуется в строку при вызове repr
или pprint.pformat
, так чтоOverride __repr__ или pprint для Int
repr(dict(a=5, b=100))
даст "{a: 0x5, b: 0x64}"
вместо "{a: 5, b: 100}"
?
Я полагаю подклассы int
типа будет вариантом:
class IntThatPrintsAsHex(int):
def __repr__(self):
return hex(self)
def preprocess_for_repr(obj):
if isinstance(obj, dict):
return {preprocess_for_repr(k): preprocess_for_repr(v) for k, v in obj.items()}
elif isinstance(obj, list):
return [preprocess_for_repr(e) for e in obj]
elif isinstance(obj, tuple):
return tuple(preprocess_for_repr(e) for e in obj)
elif isinstance(obj, int) and not isinstance(obj, bool):
return IntThatPrintsAsHex(obj)
elif isinstance(obj, set):
return {preprocess_for_repr(e) for e in obj}
elif isinstance(obj, frozenset):
return frozenset(preprocess_for_repr(e) for e in obj)
else: # I hope I didn't forget any.
return obj
print(repr(preprocess_for_repr(dict(a=5, b=100))))
Но как вы можете видеть, функция preprocess_for_repr
довольно неприятно держать «как полные, по мере необходимости» и работать. Кроме того, очевидные последствия для работы.
Нет, нет другого пути. 'pprint' и' repr() '- инструменты отладки, не предназначенные для создания презентаций конечных пользователей. –
В отличие от 'str()', я полагаю? –
да и 'format()' и 'str.format()'. –