Как определить вывод класса в консоли ipython - PullRequest
0 голосов
/ 04 марта 2019

Допустим, у меня есть следующий код:

class PrintStuff:
    def __init__(self,stuff):
        self._stuff = stuff

    def __str__(self):
        return self._stuff

Если я сделаю его экземпляр в ipython и введу имя экземпляра, он выведет то, что кажется именем класса, ирасположение его в памяти.Однако, если я помещу экземпляр в функцию печати, он распечатывается, как и ожидалось:

pstuff = PrintStuff('print this stuff')

pstuff
Out[44]: <__main__.PrintStuff at 0x7fae0531de80>

print(pstuff)
print this stuff

Как бы я сделал так, чтобы консоль ipython печатала те же вещи, что и функция печати?Например, серия панд имеет тип поведения, которое я ищу:

series = pd.Series({'x':[1,2],'y':[2,3],'z':[3,4]})

series
Out[47]: 
x    [1, 2]
y    [2, 3]
z    [3, 4]
dtype: object

print(series)
x    [1, 2]
y    [2, 3]
z    [3, 4]
dtype: object

1 Ответ

0 голосов
/ 04 марта 2019

Вам необходимо добавить __repr__:

По умолчанию объект __repr__ возвращает тип и адрес памяти, это то, что вы видите, когда консоль выводит (например):

<__main__.PrintStuff at 0x7fae0531de80>

После перегрузки __repr__ вы управляете выходом.

class PrintStuff:
    def __init__(self,stuff):
        self._stuff = stuff

    def __str__(self):
        return self._stuff

    def __repr__(self):
        return str(self)


pstuff = PrintStuff('print this stuff')
pstuff

выход:

print this stuff
...