from pprint import pprint from inspect import getmembers from types import FunctionType
defattributes(obj): disallowed_names = { name for name, value in getmembers(type(obj)) ifisinstance(value, FunctionType) } return { name: getattr(obj, name) for name indir(obj) if name[0] != '_'and name notin disallowed_names andhasattr(obj, name) }
defprint_attributes(obj): pprint(attributes(obj))
classO: def__init__(self): self.value = 3
o = O() print_attributes(o)
核心代码
以下是一个综合的自定义函数,用于打印对象的所有属性和值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
from pprint import pprint from inspect import getmembers from types import FunctionType
defattributes(obj): disallowed_names = { name for name, value in getmembers(type(obj)) ifisinstance(value, FunctionType) } return { name: getattr(obj, name) for name indir(obj) if name[0] != '_'and name notin disallowed_names andhasattr(obj, name) }
defdump(obj): for name indir(obj): e = False with warnings.catch_warnings(): warnings.simplefilter("ignore") try: v = getattr(obj, name) except: e = True warnings.simplefilter("default") ifnot e: print(f"obj.{name} = {v!r}") else: print(f"<inaccessible property obj.{name}>")