我最近看到了这样一段代码:
class InlineParameterResolver:
def resolve(__self__, value: str) -> Any:
return value
现在,我知道这段代码很奇怪,因为类本身没有示例方法,也没有init方法来创建示例并操作其内部属性,但是将__self__作为第一个参数是否有任何特殊的功能/行为?
我试着在谷歌上寻找答案,但找不到任何东西,我只是想知道这是一个学习的机会,还是我只是从一个没有太多语言经验的人那里阅读Python。
干杯。
2条答案
按热度按时间ukdjmx9f1#
使用
__self__
作为第一个参数是否有任何特殊的功能/行为?没有特殊的功能或行为。即使使用
self
只是第一个位置参数的命名约定,使用foo
或其他任何东西都可以工作。但是,使用名称
__self__
是不可取的,因为它在datamodel中已经有了不同的含义:当一个示例方法对象是通过一个类的示例从类中检索一个函数对象来创建的,它的__self__
属性就是示例,并且该方法对象被称为是绑定的。使用双下划线名称作为函数参数很奇怪,会引起混淆,所以我建议避免这样做。
cyvaqqii2#
你描述了一些来历不明的代码:
其中任何一个的行为都是相同的:
最好是最后一个,因为它是传统的。
我们写代码来和机器交流,是的。但是主要我们写作是为了向读者清楚地传达作者的意图。在python上下文中,不使用
self
(或cls
用于类方法)会模糊意图,并让Gentle Reader感到困惑。走常规路线。