[docs]defasdict(obj,/,*,secure=True,verbose=False,mode:Literal["json","python"]|str="json",):iftype(obj)inADDITIONAL_SERIALIZERS:returnADDITIONAL_SERIALIZERS[type(obj)](obj,secure=secure,verbose=verbose)ifhasattr(obj,"_asdict"):returnobj._asdict(secure=secure)_asdict=partial(asdict,secure=secure,verbose=verbose,mode=mode)ifhasattr(obj,"model_dump"):return_asdict(obj.model_dump(mode=mode,exclude_unset=notverbose,exclude_defaults=notverbose))iftype(obj)indataclasses._ATOMIC_TYPES:returnobjifdataclasses._is_dataclass_instance(obj):# fast path for the common casereturn{f.name:_asdict(getattr(obj,f.name))forfindataclasses.fields(obj)}ifisinstance(obj,tuple)andhasattr(obj,"_fields"):returntype(obj)(*[_asdict(v)forvinobj])ifisinstance(obj,(list,tuple)):returntype(obj)(_asdict(v)forvinobj)ifisinstance(obj,dict):ifhasattr(type(obj),"default_factory"):# obj is a defaultdict, which has a different constructor from# dict as it requires the default_factory as its first arg.result=type(obj)(getattr(obj,"default_factory"))fork,vinobj.items():result[_asdict(k)]=asdict(v,secure=secure)returnresultreturntype(obj)((_asdict(k),_asdict(v))fork,vinobj.items())returncopy.deepcopy(obj)