Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Question about idiomatic use of _ and private stuff.

Reply
Thread Tools

Question about idiomatic use of _ and private stuff.

 
 
Steven W. Orr
Guest
Posts: n/a
 
      02-23-2007
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
 
Reply With Quote
 
 
 
 
goodwolf
Guest
Posts: n/a
 
      02-24-2007
On Feb 23, 5:12 pm, "Steven W. Orr" <(E-Mail Removed)> wrote:
> 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.

 
Reply With Quote
 
 
 
 
Bruno Desthuilliers
Guest
Posts: n/a
 
      02-25-2007
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".

 
Reply With Quote
 
Eric Brunel
Guest
Posts: n/a
 
      02-26-2007
On Sun, 25 Feb 2007 22:12:52 +0100, Bruno Desthuilliers
<(E-Mail Removed)> wrote:

> 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+-'])"
 
Reply With Quote
 
Bruno Desthuilliers
Guest
Posts: n/a
 
      02-27-2007
Eric Brunel a écrit :
> On Sun, 25 Feb 2007 22:12:52 +0100, Bruno Desthuilliers
> <(E-Mail Removed)> wrote:
>
>> 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 />
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
idiomatic way to collect and report multiple exceptions? Ben Cohen Python 4 05-10-2010 09:50 AM
Re: Question about idiomatic use of _ and private stuff. Troy Melhase Python 3 02-25-2007 09:15 PM
Solved: Question about idiomatic use of _ and private stuff. Steven W. Orr Python 2 02-24-2007 05:06 AM
RE: Why I use private variables (WAS: RE:"private" variablesa.k.a. name mangling?) Jeremy Bowers Python 3 01-24-2005 10:52 PM
Idiomatic way of repeating items in a sequence. alr Python 12 07-02-2003 08:28 AM



Advertisments