Как можно написать функцию на python для замены текущей функции str ()? - PullRequest
0 голосов
/ 13 сентября 2018

Я знаю, как привести к строке, но как на самом деле работает приведение к строке? Например, если бы я написал свою собственную функцию на python, чтобы заменить текущую функцию str (), как бы я это сделал?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

str как тип

Нельзя заменить тип str.Это базовый тип, который не может быть имитирован классом Python без использования самого str.

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

Это происходит потому, что Python является языком высокого уровня.Вы можете думать об этом как об API для использования многих хорошо продуманных функций C, в случае с CPython.Это означает, что у вас нет доступа к ключевым компонентам, таким как указатели, манипуляции с битами и выделение памяти, которые позволили бы вам переопределить некоторые типы, такие как int, str или tuple, без какого-либо их использования в процессе.

str cast

На более базовом уровне, если вы хотите знать, как работает трубопровод для приведения к строке, это относительно просто.

Функцияstr вызовет __str__ метод объекта для приведения.Если он не существует, он возвращается к repr.

def str(obj=''):
    if hasattr(obj, '__str__'):
        return obj.__str__()
    else:
        return repr(obj)

. Объект отвечает за форматирование str, возвращаемого его методом __str__.

0 голосов
/ 13 сентября 2018

Вы можете использовать метод dunder __str__, чтобы переопределить метод object и вернуть понятное сообщение.

class Example:
    def __init__(self, example='an example'):
        self.example = example
    def __str__(self):
        return f'here is the str representation of {self.example}'

пример:

e = Example()
print(e)   # equivalent to calling print(str(e))

вывод:

here is the str representation of an example

Без метода __str__ он вернется к использованию object, и результат будет примерно таким:

<__main__.Example object at 0x10f8da4a8>

Вот ссылка Модель данных Python __str__ часть
и ссылка на документацию по Python о str объектах
, где вы найдете дополнительную справочную информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...