Decimal = self.decimal.Decimal
class MyDecimal(Decimal):
- pass
+ def __init__(self, _):
+ self.x = 'y'
self.assertTrue(issubclass(MyDecimal, Decimal))
self.assertEqual(type(r), MyDecimal)
self.assertEqual(str(r),
'0.1000000000000000055511151231257827021181583404541015625')
+ self.assertEqual(r.x, 'y')
+
bigint = 12345678901234567890123456789
self.assertEqual(MyDecimal.from_float(bigint), MyDecimal(bigint))
self.assertTrue(MyDecimal.from_float(float('nan')).is_qnan())
/* class method */
static PyObject *
-dec_from_float(PyObject *dec, PyObject *pyfloat)
+dec_from_float(PyObject *type, PyObject *pyfloat)
{
PyObject *context;
+ PyObject *result;
CURRENT_CONTEXT(context);
- return PyDecType_FromFloatExact((PyTypeObject *)dec, pyfloat, context);
+ result = PyDecType_FromFloatExact(&PyDec_Type, pyfloat, context);
+ if (!PyDec_CheckExact(type) && result != NULL) {
+ Py_SETREF(result, PyObject_CallFunctionObjArgs(type, result, NULL));
+ }
+
+ return result;
}
/* create_decimal_from_float */