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

use*_*797 3 python string class self

在阅读stringpython模块的源代码时,我很困惑Formatter.

formatFormatter类中的方法(不是静态方法或类方法)没有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)
Run Code Online (Sandbox Code Playgroud)

sna*_*erb 5

self被假定为第一arg*args,并解压缩在该行:

self, *args = args

在Python中声明一个没有self的实例方法是不寻常的.

通过查看方法签名行的git历史记录,我们可以看到最初self存在的.

它被删除,因为如果格式字符串包含一个名为的变量self,它的存在会导致错误'I am my{self}'.开箱不寻常的方式selfargs被介绍给修复bug.

错误报告和讨论就在这里.

这是错误报告的一个例子:

>>> 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'
Run Code Online (Sandbox Code Playgroud)