python – 为什么string.Formatter.format没有“self”参数?
发布时间:2020-12-20 11:08:55 所属栏目:Python 来源:网络整理
导读:在阅读 python的字符串模块的源代码时,我对Formatter类感到困惑. Formatter类中的格式方法(不是静态方法或类方法)没有self作为输入参数def格式(* args,** kwargs):,但不知何故直接在方法中使用它. self,* args = args. 请解释一下这种用法. class Formatter:
在阅读
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' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |