dt2 = dt - delta
self.assertEqual(dt2, dt - days)
+ def test_subclass_date(self):
+ class C(date):
+ theAnswer = 42
+ dt = C(2003, 4, 14)
+ self.assertEqual(dt.__class__, C)
+
class TestDate(HarmlessMixedComparison):
# Tests here should pass for both dates and datetimes, except for a
# few tests that TestDateTime overrides.
/* Create a date instance with no range checking. */
static PyObject *
-new_date(int year, int month, int day)
+new_date_ex(int year, int month, int day, PyTypeObject *type)
{
PyDateTime_Date *self;
- self = PyObject_New(PyDateTime_Date, &PyDateTime_DateType);
+ self = (PyDateTime_Date *) (type->tp_alloc(type, 0));
if (self != NULL)
set_date_fields(self, year, month, day);
return (PyObject *) self;
}
+#define new_date(year, month, day) \
+ (new_date_ex(year, month, day, &PyDateTime_DateType))
+
/* Create a datetime instance with no range checking. */
static PyObject *
new_datetime(int year, int month, int day, int hour, int minute,
{
PyDateTime_Date *me;
- me = PyObject_New(PyDateTime_Date, &PyDateTime_DateType);
+ me = PyObject_New(PyDateTime_Date, type);
if (me != NULL) {
char *pdata = PyString_AS_STRING(state);
memcpy(me->data, pdata, _PyDateTime_DATE_DATASIZE);
&year, &month, &day)) {
if (check_date_args(year, month, day) < 0)
return NULL;
- self = new_date(year, month, day);
+ self = new_date_ex(year, month, day, type);
}
return self;
}
"datetime.date", /* tp_name */
sizeof(PyDateTime_Date), /* tp_basicsize */
0, /* tp_itemsize */
- (destructor)PyObject_Del, /* tp_dealloc */
+ 0, /* tp_dealloc */
0, /* tp_print */
0, /* tp_getattr */
0, /* tp_setattr */