Question about idiomatic use of _ and private stuff.

S

Steven W. Orr

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
 
G

goodwolf

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.
 
B

Bruno Desthuilliers

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".
 
E

Eric Brunel

Steven W. Orr a écrit :

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...
 
B

Bruno Desthuilliers

Eric Brunel a écrit :
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 />
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,818
Messages
2,569,727
Members
45,664
Latest member
Phil79581

Latest Threads

Top