我知道如何转换为字符串,但是转换为字符串实际上如何工作?就像我要用python编写自己的函数来替换当前的str()函数一样,该怎么做?
答案 0 :(得分:4)
str
作为类型您不能替换str
类型。这是一种基本类型,如果不使用str
本身,则无法与Python类模仿。
以同样的方式,如果不使用int
,则无法编写int
类,因为它是表示基数值的内置方式。
发生这种情况是因为Python是一种高级语言。对于CPython,您可以将其视为使用许多精心设计的C函数的API。这意味着您无权访问诸如指针,位操作和内存分配之类的关键组件,这些组件将允许您重新实现某些类型,例如int
,str
或tuple
,而无需以某种方式使用它们在此过程中。
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的链接
您将在其中找到其他背景信息。