Python初心者なんですが、どうやるのが良いんですかね?
標準のprint
pprint
はインスタンス変数を表示してくれないのが残念。
サードパーティモジュールもいくつかあるけどGitHubのstar数は多くない。
もしかしてPythonistaはprintデバッグなんてしないんでしょうか?
ほんのちょっと試した中では無名のppretty
が一番良かったですが。
下記のコードを使って比較してみました。
import pprint
import pprintpp
import beeprint
import ppretty
class Sage:
def __init__(self):
self.x = 9
class Hoge:
def __init__(self):
self.a = 123
self.b = 'moge'
self.c = [1, 2, {'mm': 3}]
self.d = Sage()
def pvars(obj):
try:
print(vars(obj))
except:
print(obj)
def ppvars(obj):
try:
pprint.pprint(vars(obj))
except:
pprint.pprint(obj)
if __name__ == '__main__':
objs = [
Hoge(),
123,
'asd',
None,
]
print('\n### print(標準)')
for o in objs:
print(o)
print('\n### pprint(標準)')
for o in objs:
pprint.pprint(o)
print('\n### pvars(print + vars)')
for o in objs:
pvars(o)
print('\n### ppvars(pprint + vars)')
for o in objs:
ppvars(o)
print('\n### pprintpp(サードパーティ)')
for o in objs:
pprintpp.pprint(o)
print('\n### beeprint(サードパーティ)')
for o in objs:
beeprint.pp(o)
print('\n### ppretty(サードパーティ)')
for o in objs:
print(ppretty.ppretty(o))
比較結果
print(標準)
<__main__.Hoge object at 0x7fd5d931bb38>
123
asd
None
pprint(標準)
<__main__.Hoge object at 0x7fd5d931bb38>
123
'asd'
None
pvars(print + vars)
{'a': 123, 'b': 'moge', 'c': [1, 2, {'mm': 3}], 'd': <__main__.Sage object at 0x7fd5d931bb70>}
123
asd
None
ppvars(pprint + vars)
{'a': 123,
'b': 'moge',
'c': [1, 2, {'mm': 3}],
'd': <__main__.Sage object at 0x7fd5d931bb70>}
123
'asd'
None
pprintpp(サードパーティ)
<__main__.Hoge object at 0x7efc722d1b38>
123
'asd'
None
beeprint(サードパーティ)
instance(Hoge):
a: 123,
b: 'moge',
c: [
1,
2,
{
'mm': 3,
},
],
d: instance(Sage):
x: 9
123
'asd'
None
ppretty(サードパーティ)
__main__.Hoge(
a = 123,
b = 'moge',
c = [1, 2, {'mm': 3}],
d = __main__.Sage(x = 9)
)
123
'asd'
None