在阅读
python的字符串模块的源代码时,我对Formatter类感到困惑.
Formatter类中的格式方法(不是静态方法或类方法)没有self作为输入参数def格式(* 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}”,则它被删除,因为它的存在导致错误.引入了从args解包self的不寻常模式来修复bug.
错误报告和讨论是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'