Nick Coghlan added the comment: I mentioned my dislike of the classmethod->staticmethod change on the python-checkins list, but given the lack of response there, I figure I should bring it up here. It is well established that the way to implement an alternate constructor in Python is to write a classmethod. This means the alternate constructor will behave in a way similar to __new__: invocation via a subclass will result in an instance of that subclass rather than of the base type.
Now, this does usually mean the parent class is placing certain expectations on the signature of the subclass constructor. However, this is a pretty common Python idiom, and a lot friendlier than coercing the result to the base type. It makes the common case (constructor signature unchanged or at least compatible) simple, while still permitting the rarer case of changing the signature in an incompatible way (by overriding the class methods as well as the __new__ and __init__ methods) If you want to make this more convenient for users that do want to subclass and change the constructor signature, the expected interface can be factored out to a single method, similar to the way it is done for collections.Set and its _from_iterable class method (i.e. if a Set subclass constructor doesn't accept an iterable directly, it can just override _from_iterable to adapt the supplied iterable to the new interface). ---------- nosy: +ncoghlan __________________________________ Tracker <[EMAIL PROTECTED]> <http://bugs.python.org/issue1682> __________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com