Как заставить __repr__ возвращать словарь

Цель

Представляйте класс словарем: атрибуты класса стали ключами словаря, а значения атрибутов - значениями словаря.

Решение

class Class(dict):
    foo = 'foo'
    bar = 'bar'

    def __repr__(self):
        self.__setitem__('foo', self.foo)
        self.__setitem__('bar', self.bar)
        return super().__repr__()

Вывод:

>>> c = Class()
>>> c
{'foo': 'foo', 'bar': 'bar'}

Объяснение

В Python при оценке класса вызывается метод __repr__, который может возвращать только строковый тип. Если вы попытаетесь вернуть что-то другое, возникает исключение:

Traceback (most recent call last):
  File "/usr/lib/python3.7/code.py", line 90, in runcode
    exec(code, self.locals)
  File "<input>", line 1, in <module>
TypeError: __repr__ returned non-string (type dict)

Но Dictionary (dict) является встроенным типом / классом и представлен словарем (очевидно)…

Решение заключалось в:

1 - Сделайте класс наследником класса dict

2 - Замените метод __repr__, устанавливающий ключи и значения словаря с помощью метода __setitem__, и верните метод super () .__ repr__, который может возвращать словарные символы. .

Я не мог заставить свой класс работать как диктофон, не унаследовав его, если вы можете поделиться своим решением в комментариях;).

Спасибо за чтение!