Bugs item #1448640, was opened at 2006-03-13 04:54 Message generated for change (Comment added) made by blais You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1448640&group_id=5470
Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: Python Library Group: None Status: Closed Resolution: Invalid Priority: 5 Submitted By: Martin Blais (blais) Assigned to: Michael Hudson (mwh) Summary: datetime.__init__ cannot be overridden Initial Comment: Hi The following code does not work properly: #!/usr/bin/env python """ Test overriding constructor of datetime classes. """ import sys, datetime class MyDate(datetime.date): def __init__( self, year, month, day ): print >> sys.stderr, 'lose data' d = MyDate(2006, 11, 29) print d class MyDate(datetime.date): def __new__( self, year, month, day ): print 'lose data' def __init__( self, year, month, day ): print 'lose data again' d = MyDate(2006, 11, 29) print d The output is: lose data 2006-11-29 lose data None The problem is that the initialization of the object is done in its time_new() method which is registered for __new__ rather than using an __init__ method. This prevent one from overriding the date/datetime/time constructors. cheers, ---------------------------------------------------------------------- >Comment By: Martin Blais (blais) Date: 2006-03-13 21:45 Message: Logged In: YES user_id=10996 Hmmmm... that's not quite true. If I derive from datetime in order to add new data members (e.g. in my case I add "seq" which is used as a sequence number on top of datetime for storing the names of photographs, the sequence number is in case I have a panorama or multiple photographs in burst mode--all within one second), I might want a different constructor. I tried overriding __new__ and had some troubles, cannot remember what exactly, will reproduce and send code soon. ---------------------------------------------------------------------- Comment By: Michael Hudson (mwh) Date: 2006-03-13 16:42 Message: Logged In: YES user_id=6656 datetime.date objects are immutable, so this is the same as not being able to override __init__ in a subclass of int. Override __new__ instead. ---------------------------------------------------------------------- Comment By: splitscreen (splitscreen) Date: 2006-03-13 15:40 Message: Logged In: YES user_id=1126061 Isn't this an abuse of __new__ ? Taken from the documentation: "__new__ must return an object. There's nothing that requires that it return a new object that is an instance of its class argument, although that is the convention. If you return an existing object, the constructor call will still call its __init__ method. If you return an object of a different class, its __init__ method will be called. If you forget to return something, Python will unhelpfully return None, and your caller will probably be very confused." So, you're actually calling __init__ with None? Or have i misunderstood? ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1448640&group_id=5470 _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com