Dunder [was Re: __init__ is the initialiser]

MRAB python at mrabarnett.plus.com
Sat Feb 1 04:04:11 CET 2014

On 2014-02-01 02:52, Steven D'Aprano wrote:
> 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.
So you've never used the word "ctenoid"? How strange! :-)

(adj. - Resembling a comb; having projections like the teeth of a comb.)

> 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