Convertir recursivamente el gráfico de objetos de Python al diccionario

Estoy tratando de convertir los datos de un gráfico de objeto simple en un diccionario. No necesito información de tipo ni métodos y no necesito poder volver a convertirla en un objeto de nuevo.

encontréEsta pregunta sobre la creación de un diccionario desde los campos de un objeto., pero no lo hace recursivamente.

Al ser relativamente nuevo en Python, me preocupa que mi solución pueda ser fea, no estética, o esté rota de alguna manera oscura, o simplemente como un antiguo NIH.

Mi primer intento pareció funcionar hasta que lo probé con listas y diccionarios, y me pareció más fácil verificar si el objeto que se pasó tenía un diccionario interno y, en caso contrario, tratarlo como un valor (en lugar de hacer todo eso) ). Mis intentos anteriores tampoco se convirtieron en listas de objetos:

<code>def todict(obj):
    if hasattr(obj, "__iter__"):
        return [todict(v) for v in obj]
    elif hasattr(obj, "__dict__"):
        return dict([(key, todict(value)) 
            for key, value in obj.__dict__.iteritems() 
            if not callable(value) and not key.startswith('_')])
    else:
        return obj
</code>

Esto parece funcionar mejor y no requiere excepciones, pero una vez más, todavía no estoy seguro de si hay casos aquí, no estoy al tanto de dónde se cae.

Cualquier sugerencia sería muy apreciada.

Respuestas a la pregunta(8)

Su respuesta a la pregunta