Как создать интерактивный метод печати (__repr__) для класса в Python - PullRequest
1 голос
/ 14 марта 2019

Я пытаюсь создать объект, содержащий словарь, и когда я печатаю объект, он печатает словарь так же, как при печати словаря в интерактивном режиме.

См. Пример в ipython:

In [1]: class A(object):
   ...:     def __init__(self, d):
   ...:         self.d = d
   ...:
   ...:     def __repr__(self):
   ...:         return repr(self.d)

In [2]: a = {"aaaaaaaaaaaaaaaaaaaaaaa": 1, "bbbbbbbbbbbbbbbbbbbbbbb": 2, "ccccccccccccccccccccccc": 3}

In [3]: a
Out[3]:
{'aaaaaaaaaaaaaaaaaaaaaaa': 1,
 'bbbbbbbbbbbbbbbbbbbbbbb': 2,
 'ccccccccccccccccccccccc': 3}

In [4]: A(a)
Out[4]: {'aaaaaaaaaaaaaaaaaaaaaaa': 1, 'bbbbbbbbbbbbbbbbbbbbbbb': 2, 'ccccccccccccccccccccccc': 3}

Я ожидаю, что при печати A(a) каждый ключ словаря будет записан в отдельной строке, так же, как когда мы просто печатаем a, но это не так. Как мне это сделать? Я знаю, что могу вручную создать метод для печати словаря, как мне нравится, но мне интересно, есть ли способ сделать это без создания собственного метода печати словаря, чтобы получить вывод, и просто использовать метод, который используется для печати словарь в ipython.

Следовательно, как мне это получить?

In [4]: A(a)
Out[4]:
{'aaaaaaaaaaaaaaaaaaaaaaa': 1,
 'bbbbbbbbbbbbbbbbbbbbbbb': 2,
 'ccccccccccccccccccccccc': 3}
...