Naming the self parameter something else
在python中,此代码有效:
1 2 3 4 5 6 7 8 9 10 | class A: def __init__(me): me.foo = 17 def print_foo(myself): print(myself.foo) def set_foo(i, v): i.foo = v |
正如您可能已经注意到的,
在这种情况下,命名
PEP8非常清楚地说明了这一点:
Always use self for the first argument to instance methods.
Always use cls for the first argument to class methods.
号
尽管记住,作为Python样式指南,这并不是强制的
However, know when to be inconsistent -- sometimes style guide
recommendations just aren't applicable. When in doubt, use your best
judgment. Look at other examples and decide what looks best.
号
有时,像在
《样式指南》实际上列出了一些您可能会违反上述引文下面的惯例的原因:
Some other good reasons to ignore a particular guideline:
When applying the guideline would make the code less readable, even for someone who is used to reading code that follows this PEP. To be consistent with surrounding code that also breaks it (maybe for historic reasons) -- although this is also an opportunity to clean
up someone else's mess (in true XP style).Because the code in question predates the introduction of the guideline and there is no other reason to be modifying that code. When the code needs to remain compatible with older versions of Python that don't support the feature recommended by the style guide.
号
问题的第一部分是:"是否存在这样一种情况:在这种情况下,命名自参数(self以外的东西)是有用的?"我不知道有什么真正令人信服的案例,但即使有人想出了完美的例子,它们也非常罕见,我也不会把它们当作设计选择的理由:正常使用比偶尔非故意使用
那么为什么python允许这样做呢?这里有两个问题:为什么要求
为什么它不是关键字是相当清楚的:python的设计者总是尽量减少语言中保留字的数量(在引入新语法时尽一切努力重用已经保留的字,例如,使用
一旦确定
这篇来自guido van rossum的博客文章对这个主题做了一些解释。具体来说:
I see no reason with this proposal to make 'self' a reserved word or to require that the prefix name be exactly 'self'.
号
这只是一个惯例,很高兴坚持下去。
self参数实际上只是通过约定来命名self,这甚至不是一个普遍接受的约定——我也经常看到cls或者用这个来代替。
在Python中,"自我"这个词不是,比如说,Java。用户可以选择给它命名任何他们想要的名字-尽管为了清晰起见,最好选择一个名字并在整个代码中坚持这个名字,但是没有任何东西阻止你在每个方法中给它命名不同的名字。