Представление экземпляра класса к чему-то кроме строки

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

Как я могу вызвать пользовательский экземпляр класса и заставить его возвращать что-то, кроме тарабарщины, а также что-то кроме строки?

Например, если я создаю список mylist = [1,2,3,4,5] а затем введите "mylist" в командную строку, он возвращает список, который я создал

mylist
Out[16]: [1, 2, 3, 4, 5]

То же самое верно и для других аспектов Python, таких как датафрейм

a = pd.DataFrame()
a
Out[18]: 
Empty DataFrame
Columns: []
Index: []

Как у меня что-то подобное происходит с пользовательским классом? Примерно так: вызов экземпляра класса возвращает один из его определяющих атрибутов или что-то подобное (кроме строки). Возможно ли это (или типичная практика?) Вместо возвращения

<__main__.MyClass at stuff>

Спасибо за ответы!

1 ответ

Решение

Используйте специальные методы __str__ а также __repr__:

class A:

    def __str__(self):
        # if __str__ isn't defined, it will default to __repr__
        return 'A description for print'

    def __repr__(self):
        return 'This description will appear in the REPL'

Пример:

>>> a = A()
>>> a
This description will appear in the REPL
>>> print(a)
A description for print
>>> 
Другие вопросы по тегам