__dict__
- это атрибут реализации, который хранит только «прямые» атрибуты для каждого экземпляра (поэтому свойства или другие вычисленные атрибуты там не будут найдены). И он существует только для типов на основе dict - на основе слотов вообще нет dict.
attrs.asdict
OTHO использует метаданные типа для получения списка имен атрибутов (поэтому он будет работать над основанные на слотах классы), использует getattr()
для получения значений (поэтому он будет правильно извлекать вычисленные атрибуты), может рекурсивно использовать атрибуты, для которых "attrs-enabled", et c. Но он, конечно, будет работать только для типов с поддержкой attrs ...