如何用python写一个函数来替换当前的str()函数?

时间:2018-09-13 15:05:48

标签: python string casting

我知道如何转换为字符串,但是转换为字符串实际上如何工作?就像我要用python编写自己的函数来替换当前的str()函数一样,该怎么做?

2 个答案:

答案 0 :(得分:4)

str作为类型

您不能替换str类型。这是一种基本类型,如果不使用str本身,则无法与Python类模仿。

以同样的方式,如果不使用int,则无法编写int类,因为它是表示基数值的内置方式。

发生这种情况是因为Python是一种高级语言。对于CPython,您可以将其视为使用许多精心设计的C函数的API。这意味着您无权访问诸如指针,位操作和内存分配之类的关键组件,这些组件将允许您重新实现某些类型,例如intstrtuple,而无需以某种方式使用它们在此过程中。

str演员

从更基本的角度讲,如果您想知道用于转换为字符串的管道是如何工作的,则它相对简单。

函数str将调用要投射的对象的__str__方法。如果不存在,它将退回到repr上。

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

对象有责任格式化str的{​​{1}}方法以使其格式化。

答案 1 :(得分:0)

您可以使用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>

这里是the Python Data Model __str__部分的链接
以及指向str对象的python documentation的链接
您将在其中找到其他背景信息。