469,914 Members | 2,329 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,914 developers. It's quick & easy.

Question about idiomatic use of _ and private stuff.

I understand that two leading underscores in a class attribute make the
attribute private. But I often see things that are coded up with one
underscore. Unless I'm missing something, there's a idiom going on here.

Why do people sometimes use one leading underscore?

TIA

--
Time flies like the wind. Fruit flies like a banana. Stranger things have .0.
happened but none stranger than this. Does your driver's license say Organ ..0
Donor?Black holes are where God divided by zero. Listen to me! We are all- 000
individuals! What if this weren't a hypothetical question?
steveo at syslang.net
Feb 23 '07 #1
4 1074
On Feb 23, 5:12 pm, "Steven W. Orr" <ste...@syslang.netwrote:
I understand that two leading underscores in a class attribute make the
attribute private. But I often see things that are coded up with one
underscore. Unless I'm missing something, there's a idiom going on here.

Why do people sometimes use one leading underscore?

TIA

--
Time flies like the wind. Fruit flies like a banana. Stranger things have .0.
happened but none stranger than this. Does your driver's license say Organ ..0
Donor?Black holes are where God divided by zero. Listen to me! We are all- 000
individuals! What if this weren't a hypothetical question?
steveo at syslang.net
One underscore stay for 'protected'. Protected in OOP means that the
attribute is hidden outside the class but visible for subclasses. In
python one undersore is only a good convention for say that the
attribute is protected.
So users will ignore attributes with initial undersocre. Users who
subclass must know of that attributes existence for prevent unwonted
overriding.

Sory for my english.

Feb 24 '07 #2
Steven W. Orr a écrit :
I understand that two leading underscores in a class attribute make the
attribute private.
Nope. It doesn't make it "private", it mangles the attribute name with
the class name (ie : Bar.__mangled will become Bar._Bar__mangled
everywhere except inside Bar). This is only useful when you want to make
sure an attribute will not be *accidentally* accessed by a child class.
FWIW, I've found it of very limited use so far...
But I often see things that are coded up with one
underscore. Unless I'm missing something, there's a idiom going on here.
Yes. Single leading underscore means "this is implementation, don't mess
with it or your on your own". It's the equivalent of "private".

Feb 25 '07 #3
On Sun, 25 Feb 2007 22:12:52 +0100, Bruno Desthuilliers
<bd*****************@free.quelquepart.frwrote:
Steven W. Orr a écrit :
>I understand that two leading underscores in a class attribute make the
attribute private.

Nope. It doesn't make it "private", it mangles the attribute name with
the class name (ie : Bar.__mangled will become Bar._Bar__mangled
everywhere except inside Bar). This is only useful when you want to make
sure an attribute will not be *accidentally* accessed by a child class.
FWIW, I've found it of very limited use so far...
If I'm not mistaken, it was originally introduced to allow designers of
sub-classes to use any attribute name they liked, without bothering to go
up the whole class hierarchy to make sure this name was not already used.
Even if Python relies far less on inheritance than other languages, class
hierarchies are sometimes quite large. If in addition, each class has a
lot of attributes, looking for an unused name can become long and painful.
In this context, the double-underscore may be a blessing.

My [¤£$¥]0.02...
--
python -c "print ''.join([chr(154 - ord(c)) for c in
'U(17zX(%,5.zmz5(17l8(%,5.Z*(93-965$l7+-'])"
Feb 26 '07 #4
Eric Brunel a écrit :
On Sun, 25 Feb 2007 22:12:52 +0100, Bruno Desthuilliers
<bd*****************@free.quelquepart.frwrote:
>Steven W. Orr a écrit :
>>I understand that two leading underscores in a class attribute make
the attribute private.


Nope. It doesn't make it "private", it mangles the attribute name
with the class name (ie : Bar.__mangled will become
Bar._Bar__mangled everywhere except inside Bar). This is only useful
when you want to make sure an attribute will not be *accidentally*
accessed by a child class. FWIW, I've found it of very limited use so
far...


If I'm not mistaken, it was originally introduced to allow designers of
sub-classes to use any attribute name they liked, without bothering to
go up the whole class hierarchy to make sure this name was not already
used. Even if Python relies far less on inheritance than other
languages, class hierarchies are sometimes quite large.
Zope aside - but Zope is a world in itself, and certainly not the most
Pythonic example of Python use -, I have not yet seen deep (I suppose
that's what you mean here by "large") class hierarchies in Python.
If in addition,
each class has a lot of attributes, looking for an unused name can
become long and painful. In this context, the double-underscore may be
a blessing.
My own experience is that it's often more trouble than gain. But please
note that I said "of very limited use", not "totally useless" !-)
My [¤£$¥]0.02...
<aol />
Feb 27 '07 #5

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

26 posts views Thread by Michael A. Covington | last post: by
20 posts views Thread by Mark Harrison | last post: by
5 posts views Thread by Kim | last post: by
90 posts views Thread by John Salerno | last post: by
13 posts views Thread by John Kraft | last post: by
14 posts views Thread by MartinRinehart | last post: by
12 posts views Thread by Matt B | last post: by
1 post views Thread by Waqarahmed | last post: by
reply views Thread by Salome Sato | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.