python的var_dump,打印对象内容

python

from __future__ import print_function

from types import NoneType

__author__ = "Shamim Hasnath"

__copyright__ = "Copyright 2013, Shamim Hasnath"

__license__ = "BSD License"

__version__ = "1.0.1"

TAB_SIZE = 4

infs = []

def display(o, space, num, key, typ):

st = ""

l = []

if key:

if typ is dict:

st += " " * space + "['%s'] => "

else:

st += " " * space + "%s => "

l.append(key)

elif space > 0:

st += " " * space + "[%d] => "

l.append(num)

else: # at the very start

st += "#%d "

l.append(num)

if type(o) in (tuple, list, dict, int, str, float, long, bool, NoneType, unicode):

st += "%s(%s) "

l.append(type(o).__name__)

if type(o) in (int, float, long, bool, NoneType):

l.append(o)

else:

l.append(len(o))

if type(o) in (str, unicode):

st += '"%s"'

l.append(o)

elif isinstance(o, object):

st += "object(%s) (%d)"

l.append(o.__class__.__name__)

l.append(len(getattr(o, '__dict__', {})))

#print(st % tuple(l))

infs.append(st % tuple(l))

def display_s(o, space, num, key, typ):

st = ""

l = []

if key:

if typ is dict:

st += " " * space + "['%s']=>"

else:

st += " " * space + "%s=>"

l.append(key)

# elif space > 0:

# st += " " * space + "[%d] => "

# l.append(num)

# else: # at the very start

# st += "#%d "

# l.append(num)

if type(o) in (tuple, list, dict, int, str, float, long, bool, NoneType, unicode):

st += "%s"

# l.append(type(o).__name__)

if type(o) in (int, float, long, bool, NoneType):

l.append(o)

else:

l.append('')

if type(o) in (str, unicode):

st += '"%s"'

l.append(o)

elif isinstance(o, object):

st += "%s"

l.append(o.__class__.__name__)

# l.append(len(getattr(o, '__dict__', {})))

#print(st % tuple(l))

infs.append(st % tuple(l))

def dump(o, space, num, key, typ):

if type(o) in (str, int, float, long, bool, NoneType, unicode):

display(o, space, num, key, typ)

elif isinstance(o, object):

display(o, space, num, key, typ)

num = 0

if type(o) in (tuple, list, dict):

typ = type(o) # type of the container of str, int, long, float etc

elif isinstance(o, object):

o = getattr(o, '__dict__', {})

typ = object

for i in o:

space += TAB_SIZE

if type(o) is dict:

dump(o[i], space, num, i, typ)

else:

dump(i, space, num, '', typ)

num += 1

space -= TAB_SIZE

def dump_s(o, space, num, key, typ):

if type(o) in (str, int, float, long, bool, NoneType, unicode):

display_s(o, space, num, key, typ)

elif isinstance(o, object):

display_s(o, space, num, key, typ)

num = 0

if type(o) in (tuple, list, dict):

typ = type(o) # type of the container of str, int, long, float etc

elif isinstance(o, object):

o = getattr(o, '__dict__', {})

typ = object

for i in o:

space += TAB_SIZE

if type(o) is dict:

dump_s(o[i], space, num, i, typ)

else:

dump_s(i, space, num, '', typ)

num += 1

space -= TAB_SIZE

def _get_space_num(s):

i = 0

for c in s:

if c == ' ':

i+=1

else:

break

s = s[i:]

return i,s

def var_dump(*obs):

"""

shows structured information of a object, list, tuple etc

"""

global infs

infs = []

i = 0

for x in obs:

dump(x, 0, i, '', object)

i += 1

for inf in infs:

print(inf)

def var_dump_s(*obs):

"""

shows structured information of a object, list, tuple etc

"""

global infs

infs = []

i = 0

for x in obs:

dump_s(x, 0, i, '', object)

i += 1

strs = []

bsn = 0

for inf in infs:

sn, s = _get_space_num(inf)

if sn > bsn:

strs.append('{')

if sn < bsn:

strs.append('}, ')

if sn == bsn and sn != 0:

strs.append(', ')

strs.append(s)

bsn = sn

while bsn > 0:

strs.append('}')

bsn = bsn - TAB_SIZE

return ''.join(strs)

测试例子:

from var_dump import *

class A:

def __init__(self,aa,bb):

self.a = aa

self.b = bb

def pa(self):

print(self.a,self.b)

class B:

def __init__(self):

self.y = 13423

self.g = 'sdsdsds'

self.ob = A(223,454)

a = A(3,4)

a = B()

var_dump(a)

print('---------------------')

s = var_dump_s(a)

print(s)


输出:

#0 object(B) (3)

y => int(13423)

ob => object(A) (2)

a => int(223)

b => int(454)

g => str(7) "sdsdsds"

---------------------

B{y=>13423, ob=>A{a=>223, b=>454}, g=>"sdsdsds"}

以上是 python的var_dump,打印对象内容 的全部内容, 来源链接: utcz.com/z/386794.html

回到顶部