给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

正如你可能已经注意到了,该self参数命名me__init__方法,myselfprint_foo方法和iset_foo方法。

在某种情况下,给self参数命名不是self有用的吗?如果不是,为什么Python允许这样做,因为它无疑是编写难以阅读和维护的代码的方式,也是造成混乱的原因?


问题答案:

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

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

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

虽然请记住,
不是
python 样式指南,
并未强制执行

但是,要知道何时会出现不一致的情况-有时,样式指南建议并不适用。如有疑问,请运用最佳判断。查看其他示例并确定最合适的方法。

有时,如中的fractions.py,您可能会更清楚地使用a,b而不是self,other因为<your specific reasons>

样式指南实际上在上面的引号下方列出了一些您可能违反常规约定的原因:

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

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