<div dir="ltr"><div dir="ltr"><div>I just joined the ideas list today so I do not know if this has been discussed.</div><div><br></div><div>Using dataclasses has been great for me, but a challenge is what to do when you don't <i>know</i> if the object you are using is a dataclass, and could be a variety of other classes.</div><div><br></div><div>This could easily occur when you don't want to assume the data type being used by the user to represent their data, but wish to turn it into a dict (if an API exists to do so).</div><div><br></div>Currently, you have to do something like this when you don't know if your object is a dataclass instance (I am using "dict_factory" since that is already the asdict() keyword arg):</div><div dir="ltr"><div><br></div><div>d = asdict(obj) if is_dataclass(obj) else dict_factory(obj)</div><div><br></div><div>If it could also be a namedtuple, you might write this:</div><div><br></div><div>d = asdict(obj) if is_dataclass(obj) else obj._asdict() if isinstance(obj, namedtuple) else dict_factory(obj)</div><div><br></div><div>and if it could also be some other object with an .asdict() method:</div><div><br></div><div>d = asdict(obj) if is_dataclass(obj) else obj._asdict() if isinstance(obj, namedtuple) else obj.asdict() if hasattr(obj, "asdict") else dict_factory(obj) </div><div><br></div><div>This gets pretty silly/unwieldy somewhat quickly.<br clear="all"><div><div dir="ltr" class="gmail_signature"><div dir="ltr"><br></div></div></div>The idea is: 1. identifying the various "asdict" APIs used in the standard library, and 2. include a keyword option for dataclasses.asdict() to cast a non-dataclasses object to a dict using these protocols (and falling back on factory_dict(obj) if it is provided).<div><br></div><div><div><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><br></div><div>---</div>Ricky.<br><br>"I've never met a Kentucky man who wasn't either thinking about going home or actually going home." - Happy Chandler</div></div></div></div></div></div></div>