gpt4 book ai didi

python - 为什么 string.Formatter.format 没有 "self"参数?

转载 作者:太空宇宙 更新时间:2023-11-03 13:26:50 26 4
gpt4 key购买 nike

在阅读python的string模块源码时,被Formatter类搞糊涂了。

Formatter 类中的 format 方法(既不是静态方法也不是类方法)没有 self 作为输入参数 def format(*args, **kwargs ):,但以某种方式直接在方法中使用它。 self, *args = args.

请解释这个用法。

class Formatter:
def format(*args, **kwargs):
if not args:
raise TypeError("descriptor 'format' of 'Formatter' object "
"needs an argument")
self, *args = args # allow the "self" keyword be passed
try:
format_string, *args = args # allow the "format_string" keyword be passed
except ValueError:
if 'format_string' in kwargs:
...
else:
...
return self.vformat(format_string, args, kwargs)

最佳答案

self 被假定为 *args 中的第一个 arg,并在这一行解包:

self, *args = args

在 Python 中,在签名中声明一个没有 self 的实例方法是不常见的。

通过查看 git history对于方法签名行,我们可以看到最初存在 self

它被删除是因为如果格式字符串包含名为 self 的变量,例如 'I am my{self}',它的存​​在会导致错误。引入了从 args 解包 self 的不寻常模式来修复错误。

错误报告和讨论是here .

这是错误报告中的错误示例:

>>> string.Formatter().format('the self is {self}', self='bozo')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: format() got multiple values for argument 'self'

关于python - 为什么 string.Formatter.format 没有 "self"参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53935689/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com