LINUX.ORG.RU

python класс в строку

 


0

1

Скажите, какой метод нужно добавить в класс, что бы интерпретатор использовал его при автоприведении к строковому типу? Например у меня есть класс А и я хочу что бы при вызове

print [A(1),A(2),A(3)]
интерпретатор выводил не
[<__main__.A instance at 0x0000>,<__main__.A instance at 0x0000>,<__main__.A instance at 0x0000>]
а использовал мой метод. С методом __str__ это не работает. P.S. python 2.7

★★★★★

Если быть точным, то:

>>> class A(object):
...   def __str__(self):
...     return '__str__ method'
...   def __repr__(self):
...     return '__repr__ method'
... 
>>> a = A()
>>> a
__repr__ method
>>> print a
__str__ method
>>> 

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

anonymous ()
Ответ на: комментарий от anonymous

__str__ — это строковое представление (для юзера),

правильно

__repr__ — отладочное (для разработчика)

неправильно, по-хорошему этот метод должен возращать строковое представление объекта, пригодное для восстановления его функцией eval, но для пользовательских объектов это, очевидно, невозможно, поэтому выводится, что выводится, а вот для встроенных типов данных работает

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.