Double underscore nomenclature in Python


#1

So, I’m stuck re-engineering some dreadful Python library code into
Ruby (and I mean terrible, a mish-mash of different clashing
programming paradigms – inheritance, delegation, etc. severely
intertwined all over, ugghh), and I came across Python’s use of these
double underscore methods (hook_method. I’m a Python virgin; so
sue me. Never learned Perl, either).

I’m curious as to why Ruby unintentionally keeps these type of things
less obvious. I’ve seen many questions on this group concerning #puts
using an object’s #to_s to display itself. Don’t get me wrong; it
doesn’t bother me at all, but I’ve run across a few newbies that
struggle with this type of “hidden” guru knowledge (It’s surely not
hidden, but not easy to discover either; sort of like a live
Architeuthis).

So, should one ingrain a style into the language (like the BeOS team
very strongly suggested with its C++ coding practice guidelines), or
keep it laid back and just be firm with people about reading the docs?

Todd


#2

On Apr 13, 8:04 pm, Todd B. removed_email_address@domain.invalid wrote:

doesn’t bother me at all, but I’ve run across a few newbies that
struggle with this type of “hidden” guru knowledge (It’s surely not
hidden, but not easy to discover either; sort of like a live
Architeuthis).

Python uses __method_name to denote private methods (not enforced,
just a convention). Ruby has keywords ‘private’ and ‘protected’.

Python uses method_name with leading and trailing underscores for
special system functions with pre-defined behavior. Like init()
where ruby uses ‘initialize’.

Python has certain underscore methods for operator overloading; you
define add() to overload ‘+’. Whereas in Ruby, you simply define
the ‘+’ method.

I’m not sure how this equates to hidden guru knowledge. Ruby makes
more sense to me in these situations.

– Mark.


#3

2009/4/14 Mark T. removed_email_address@domain.invalid:

using an object’s #to_s to display itself. Don’t get me wrong; it
where ruby uses ‘initialize’.

Python has certain underscore methods for operator overloading; you
define add() to overload ‘+’. Whereas in Ruby, you simply define
the ‘+’ method.

I’m not sure how this equates to hidden guru knowledge. Ruby makes
more sense to me in these situations.

+1

Todd had a nice summary statement included in his first posting: “keep
it laid back and just be firm with people about reading the docs”. :slight_smile:

Kind regards

robert