Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #65138
| From | Mark Lawrence <breamoreboy@yahoo.co.uk> |
|---|---|
| Subject | Re: __init__ is the initialiser |
| Date | 2014-01-31 20:17 +0000 |
| References | <lcgtpf$tui$1@ger.gmane.org> <lcgut2$b8r$1@ger.gmane.org> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.6218.1391199439.18130.python-list@python.org> (permalink) |
On 31/01/2014 19:52, Ned Batchelder wrote: > On 1/31/14 2:33 PM, Mark Lawrence wrote: >> From http://docs.python.org/3/reference/datamodel.html#object.__init__ >> which states:- >> >> " >> Called when the instance is created. The arguments are those passed to >> the class constructor expression. If a base class has an __init__() >> method, the derived class’s __init__() method, if any, must explicitly >> call it to ensure proper initialization of the base class part of the >> instance; for example: BaseClass.__init__(self, [args...]). As a special >> constraint on constructors, no value may be returned; doing so will >> cause a TypeError to be raised at runtime. >> " >> >> Should the wording of the above be changed to clearly reflect that we >> have an initialiser here and that __new__ is the constructor? >> > > I'm torn about that. The fact is, that for 95% of the reasons you want > to say "constructor", the thing you're describing is __init__. Most > classes have __init__, only very very few have __new__. > > The sense that __new__ is the constructor is the one borrowed from C++ > and Java: you don't have an instance of your type until the constructor > has returned. This is why __init__ is not a constructor: the self > passed into __init__ is already an object of your class. > > But that distinction isn't useful in most programs. The thing most > people mean by "constructor" is "the method that gets invoked right at > the beginning of the object's lifetime, where you can add code to > initialize it properly." That describes __init__. > > Insisting that __init__ is not a constructor makes about as much sense > as insisting that "Python has no variables" just because they work > differently than in C. Python has variables, and it has constructors. > We don't have to be tied to C++ semantics of the word "constructor" any > more than we have to tied to its semantics of the word "variable" or "for". > > Why can't we call __init__ the constructor and __new__ the allocator? > To clarify the situation I think we should call __new__ "the thing that instanciates an instance of a class" and __init__ "the thing that isn't actually needed as you can add attributes to an instance anywhere in your code" :) -- My fellow Pythonistas, ask not what our language can do for you, ask what you can do for our language. Mark Lawrence
Back to comp.lang.python | Previous | Next | Find similar | Unroll thread
Re: __init__ is the initialiser Mark Lawrence <breamoreboy@yahoo.co.uk> - 2014-01-31 20:17 +0000
csiph-web