Как заставить __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__, который может возвращать словарные символы. .
Я не мог заставить свой класс работать как диктофон, не унаследовав его, если вы можете поделиться своим решением в комментариях;).
Спасибо за чтение!