Все ли в Python можно преобразовать в строку? - PullRequest
2 голосов
/ 19 июня 2020

Я пытаюсь найти в Python пример чего-то, что не может быть преобразовано в строку.

>>> str(None)
'None'
>>> str(False)
'False'
>>> str(5)
'5'
>>> str(object)
"<class 'object'>"
>>> class Test:
...     pass
...
>>> str(Test)
"<class '__main__.Test'>"
>>> str(Test())
'<__main__.Test object at 0x7f7e88a13630>'

Есть ли что-то во всей вселенной Python, которое нельзя преобразовать в str ?

Ответы [ 2 ]

5 голосов
/ 19 июня 2020

Все ли в Python преобразовано в строку?

Нет!

>>> class MyObject():
...     def __str__(self):
...         raise NotImplementedError("You can't string me!")
...
>>> str(MyObject())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in __str__
NotImplementedError: You can't string me!
3 голосов
/ 19 июня 2020

Из документации __str__:

The default implementation defined by the built-in type object
calls object.__repr__().

и object.__repr__ выводит имя и адрес объекта (как минимум в cpython). Вот откуда приходит ваш результат '<__main__.Test object at 0x7f7e88a13630>'. Класс должен переопределить __str__ и вызвать исключение (или иметь ошибку) для отказа. Для этого нет особых причин, и вам будет сложно найти тот, который не был создан специально для этого.

...