将 self 参数命名为其他名称

jul*_*enc 7 python self

在 Python 中,以下代码是有效的:

class A:

    def __init__(me):
        me.foo = 17

    def print_foo(myself):
        print(myself.foo)

    def set_foo(i, v):
        i.foo = v
Run Code Online (Sandbox Code Playgroud)

您可能已经注意到,参数在方法中self命名,在方法中命名,在方法中命名。me__init__myselfprint_fooiset_foo

是否存在将self参数命名为其他名称self有用的情况?如果不是,为什么 Python 允许这样做,因为这肯定是一种编写难以阅读和维护的代码的方式,而且也是混乱的根源?

Tad*_*sen 4

PEP 8 非常清楚地解决了这个问题:

始终用于self实例方法的第一个参数。

始终用于cls类方法的第一个参数。

尽管请记住,作为 python风格指南,这并不是强制执行的

然而,知道何时要不一致——有时风格指南的建议并不适用。如有疑问,请运用您的最佳判断。查看其他示例并决定哪个看起来最好。

有时,就像在fractions.py标准库中一样,使用类似的东西可能会更清楚,a,b而不是self,other因为<your specific reasons>

风格指南实际上在上面的引用下面列出了一些你可能会打破惯例的原因:

忽略特定准则的其他一些充分理由:

  1. 应用指南会降低代码的可读性,即使对于习惯阅读遵循此 PEP 的代码的人也是如此。
  2. 为了与周围的代码保持一致,这些代码也破坏了它(可能是出于历史原因)——尽管这也是清理别人混乱的机会(以真正的 XP 风格)。
  3. 因为相关代码早于指南的引入,并且没有其他原因需要修改该代码。
  4. 当代码需要与不支持样式指南推荐的功能的旧版 Python 保持兼容时。