On Jan 16, 10:25 am, "Mark Dickinson" <[EMAIL PROTECTED]> wrote:
> that is, I was working from the following two assumptions: > > (1) *Every* time a Rational is created, __init__ must eventually be > called, and > (2) The user of the class expects to call Rational() to create > rationals. (with apologies for replying to myself) I'm still not being careful. The assumptions should be these: (1) Any creation of a Rational instance must eventually go through Rational(). (2) A call to Rational() eventually results in a call to __init__. (3) The user of the class expects to call Rational() to create rationals. There you are: three flawed assumptions for the price of two! (1) fails because __new__ provides an alternative, (2) could easily become untrue by changing the metaclass, and (3)---well, who knows what the user expects? Right. Now that I've thoroughly analyzed my own stupidity, things are much clearer. Thank you to all who replied. Mark -- http://mail.python.org/mailman/listinfo/python-list