On Monday, December 12, 2016 at 12:58:30 PM UTC-5, Juan C. wrote: > Since we are talking about Python terminology I believe that calling > `__init__` a constructor is also wrong. I've already seem some > discussions regarding it and the general consensus is that `__init__` > shouldn't be called constructor as it isn't really a constructor (like > Java/C# constructors). Some source: > > - > http://stackoverflow.com/questions/4859129/python-and-python-c-api-new-versus-init > - http://stackoverflow.com/questions/674304/pythons-use-of-new-and-init
Claiming that __init__ isn't a constructor seems overly pedantic to me. What's true is that Python's constructors (__init__) are different than C++ constructors. In C++, you don't have an object of type T until the constructor has finished. In Python, you have an object of type T before __init__ has been entered. The reason to call __init__ a constructor is because of what is the same between C++ and Python: the constructor is where the author of the class can initialize instances of the class. There are many programming languages, and they have similar overlapping constructs, but there are differences among the constructs. It's a challenge to decide when those differences are great enough to use a different name, and when those differences are slight enough to just note them as a difference. As an example, people are happy to use the word "function" for things in Python, C, C++, Java, JavaScript, and Haskell, despite the huge differences in how they behave. The commonalities, especially in how these constructs are used by developers to express themselves, are similar enough that we call them all "functions." It seems to me that we can do the same for "constructor." --Ned. -- https://mail.python.org/mailman/listinfo/python-list