Movatterモバイル変換
[0]ホーム
[Python-ideas] Mitigating 'self.' Method Pollution
Michael Hewittmichael at hewitts.us
Sat Jul 11 09:25:39 CEST 2015
Let's compare two versions of a method taken from some code that my 11 yearold son wrote yesterday:*Current*global heightdef keep_moving_gravity(self): self.y += self.gravity self.y = max(self.y, 0) self.y = min(self.y, height - 1)*Proposed*global heightdef keep_moving_gravity(self): self y, gravity y += gravity y = max(y, 0) y = min(y, height - 1)Is anyone actually going to argue that the first version is cleaner andmore readable than the second? All I see when I read the first is 'self','self', 'self' -- my son's exact words to me last night.As far as maintainability, the author of the first version must repeatedlymake the same decisions over and over regarding how to scope each variablereference as he/she types 'y', 'gravity', and 'height'. The author of thesecond code makes these decisions exactly once at the top of the method andthen is free to refer to each variable naturally without the mentaloverhead of prefixing each 'y' and 'gravity' with 'self.', but God forbid -not 'height'. I can tell you that the mental overhead of this is taxing myson & is the cause of many painful mistakes -- just forgetting a single'self.' prefix on one of the above field references can waste a significantamount of time.As far as static analysis tools, this should honestly not be a lot of extrawork, since the tools must already handle 'global' in a very similarfashion.If the 'self.' prefix really does make code clearer, then we should do awaywith the 'global' scope declaration as well as automatic local scoping andrequire prefixing of all Python variables with 'self.', 'global.' or'local.'. My mind becomes numb thinking about writing such code. To me,the existence of the keyword 'global' for automatically scoping subsequentvariable references is a strong argument that a similar 'self' scopingmechanism is called for as well.And, for folks who still prefer to prefix all their field references with'self.', the proposal in no way prevents them from doing so. It merelyallows the rest of us to be a bit less wordy and more pithy in our code.MikeOn Friday, July 10, 2015, Mark Lawrence <breamoreboy at yahoo.co.uk> wrote:> On 10/07/2015 23:31, Michael Hewitt wrote:>>> Last night I made a post to the neopythonic blog proposing a Python 3.x>> feature that Guido asked me to forward to this alias. For the full>> background, see the link to my post below. For brevity, I will simply>> submit the proposal here. The specific problem I am addressing is the>> pollution of Python methods by 'self.' to reference fields. Here is the>> proposal:>>>> The name of the first parameter to a method can be used to scope>> subsequent variable references similar to the behavior of 'global'.>>>>>> Here are some examples:>>>> class Foo:>>>> def method_a(self)>>>> self x # subsequent 'x' references are scoped to 'self'>>>> x = 5 # same as self.x = 5>>>> def method_b(this)>>>> this x, y # subsequent 'x' & 'y' refs are scoped to 'this'>>>> x = y # same as this.x = this.y>>>> def method_c(its)>>>> its.x = 5 # still works just like it used to>>>>>> This suggestion is fully backward compatible with existing Python code,>> but would eliminate the need to pollute future Python methods with>> copious 'self.' prefixes, thereby improving both readability and>> maintainabilty.>>>> I disagree completely. When I see:->> self.x = 1>> I currently know exactly what I'm looking at. All I see with this> proposal is more work for my MKI eyeballs, which are already knackered, and> more work for the people who maintain our static analysis tools, as you can> still forget to properly scope your variables. So -1.>>>> Thank you for your consideration.>>>> Michael Hewitt>>>> Original Post:>>http://neopythonic.blogspot.com/2008/10/why-explicit-self-has-to-stay.html>>>>>>> --> My fellow Pythonistas, ask not what our language can do for you, ask> what you can do for our language.>> Mark Lawrence>> _______________________________________________> Python-ideas mailing list>Python-ideas at python.org>https://mail.python.org/mailman/listinfo/python-ideas> Code of Conduct:http://python.org/psf/codeofconduct/>-------------- next part --------------An HTML attachment was scrubbed...URL: <http://mail.python.org/pipermail/python-ideas/attachments/20150711/bfcd3862/attachment-0001.html>
More information about the Python-ideasmailing list
[8]ページ先頭