mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
Issue #27006: from_float(): call the subclass' __new__() and __init__().
This commit is contained in:
parent
2275e626b1
commit
6817c59cf0
2 changed files with 12 additions and 3 deletions
|
@ -2491,7 +2491,8 @@ class PythonAPItests(unittest.TestCase):
|
|||
Decimal = self.decimal.Decimal
|
||||
|
||||
class MyDecimal(Decimal):
|
||||
pass
|
||||
def __init__(self, _):
|
||||
self.x = 'y'
|
||||
|
||||
self.assertTrue(issubclass(MyDecimal, Decimal))
|
||||
|
||||
|
@ -2499,6 +2500,8 @@ class PythonAPItests(unittest.TestCase):
|
|||
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())
|
||||
|
|
|
@ -2630,12 +2630,18 @@ PyDecType_FromSequenceExact(PyTypeObject *type, PyObject *v,
|
|||
|
||||
/* 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 */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue