Dunder [was Re: __init__ is the initialiser]

Steven D'Aprano steve+comp.lang.python at pearwood.info
Sat Feb 1 03:52:52 CET 2014

On Fri, 31 Jan 2014 20:10:46 -0500, Roy Smith wrote:

> In article <mailman.6233.1391214984.18130.python-list at python.org>,
>  Ethan Furman <ethan at stoneleaf.us> wrote:
>> I found calling __init__ the constructor very confusing.
> I've heard many people say this, and it's always sort of befuddled me.
> In C++, a constructor is really an initializer too.  By the time C++'s
> Foo::Foo() or Python's Foo.__init__() get called, memory has already
> been allocated, so I would say the object has been constructed.  Yet,
> C++ people are perfectly happy calling this "thing that takes some
> allocated hunk of memory and sets its attributes to useful values" a
> constructor[1], and Python people are not.
> [1] Well, they really call it a ctor, but I chalk that up to the same
> sort of silliness that makes pythonistas pronounce "__" as "dunder" :-)

I see your smiley, but the comparison is ridiculous.

"Constructor" is three syllables; "ctor" isn't readily pronounceable in 
English at all, rather like Cthulhu. (I can't think of any standard 
English words with a "CT" in them at all, let alone at the start of the 
word). The best I can come up with is "KUH TOR" or possibly "SEE TOR", 
both of which are clumsy, and only save a single syllable.

On the other hand, "double leading and trailing underscore" is ten 
syllables. "Dunder" is two, a significant saving, and it's a readily 
pronounceable word in English (and probably Dutch). There's nothing silly 
about abbreviating "double leading and trailing underscore" as dunder.


More information about the Python-list mailing list