[Tutor] _ vs. _name vs. __name vs. name_ vs. __name__ usages
Mark Lawrence
breamoreboy at yahoo.co.uk
Sun Jul 26 02:51:19 CEST 2015
On 25/07/2015 22:08, boB Stepp wrote:
> After having a long discussion with my wife on her user requirements,
> I am convinced that an OO approach is required. Which is just as well
> as that has been one of my next areas of learning to do. I am
> currently reading "Python 3 Object Oriented Programming" by Dusty
> Phillips, which so far seems to be a reasonably good text. This has
> led me to the subject line topics.
>
> From my understandings to date:
>
> 1) A single underscore is used conventionally for a "throw-away"
> variable, such as a loop index for which the index value is not
> actually used in a subsequent calculation.
It is not a convention, it is inbuilt. It is very useful as linter type
tools don't complain about you defining something but not using it.
> 2) _name is used inside class methods to indicate that the
> programmer's intention is that this name should only be accessed
> internally by that particular class. Other supposedly "adult" Python
> programmers will attempt to respect this original intent if they use
> my code.
Correct.
> 3) __name invokes Python's name mangling mechanism. The intent of
> this usage is to not allow subclasses of the class containing __name
> to access this name, and to add additional emphasis to future users of
> my code that this name is meant to be strictly hands-off.
>
> 4) name_ is used when one is "forced" to use one of Python's reserved
> words as a name.
I don't know about reserved words but it is certainly used rather than
override a built-in name.
> 5) __name__ is meant to be used only by the creators of Python for
> their special built-in methods, such as __init__, __new__, etc.
Correct.
>
> Are my understandings above correct or flawed?
>
> For (3), it seems to me that one would normally be able to use the
> simpler _name construction from (2). What would be a best-practice
> example of when name mangling *should* be used?
I'd be inclined not to bother yourself with this. I've never used it in
the centuries that I've been writing Python, and somebody who is
determined enough can work around it anyway owing to Python's dynamic
nature.
> Likewise, it seems that normally (4) should never be needed, though I
> have a feeling that I have seen something in tkinter recently that
> suggests some exceptions, but I cannot (yet) bring it to mind.
If you like a name enough and cannot think of a better alternative why not?
>
> And for (5), surely I should never violate this one? It seems that in
> some future edition of Python they might add any particular __name__
> that I might try to use presently in their future version of Python
> (however miniscule that possibility might actually be).
Definitely.
>
> Thanks!
> boB
>
No problem. Once again my invoice is in the post, your cheque by return
please :)
--
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.
Mark Lawrence
More information about the Tutor
mailing list