Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 4cb103e

Browse files
author
Stefan Krah
committed
Merge 3.3.
2 parents dee9043 + 0f82b76 commit 4cb103e

2 files changed

Lines changed: 26 additions & 11 deletions

File tree

Lib/test/test_decimal.py

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2029,7 +2029,7 @@ def test_subclassing(self):
20292029
Decimal = self.decimal.Decimal
20302030

20312031
class MyDecimal(Decimal):
2032-
pass
2032+
y = None
20332033

20342034
d1 = MyDecimal(1)
20352035
d2 = MyDecimal(2)
@@ -2047,14 +2047,29 @@ class MyDecimal(Decimal):
20472047
self.assertIs(type(d), MyDecimal)
20482048
self.assertEqual(d, d1)
20492049

2050-
a = Decimal('1.0')
2051-
b = MyDecimal(a)
2052-
self.assertIs(type(b), MyDecimal)
2053-
self.assertEqual(a, b)
2054-
2055-
c = Decimal(b)
2056-
self.assertIs(type(c), Decimal)
2057-
self.assertEqual(a, c)
2050+
# Decimal(Decimal)
2051+
d = Decimal('1.0')
2052+
x = Decimal(d)
2053+
self.assertIs(type(x), Decimal)
2054+
self.assertEqual(x, d)
2055+
2056+
# MyDecimal(Decimal)
2057+
m = MyDecimal(d)
2058+
self.assertIs(type(m), MyDecimal)
2059+
self.assertEqual(m, d)
2060+
self.assertIs(m.y, None)
2061+
2062+
# Decimal(MyDecimal)
2063+
x = Decimal(m)
2064+
self.assertIs(type(x), Decimal)
2065+
self.assertEqual(x, d)
2066+
2067+
# MyDecimal(MyDecimal)
2068+
m.y = 9
2069+
x = MyDecimal(m)
2070+
self.assertIs(type(x), MyDecimal)
2071+
self.assertEqual(x, d)
2072+
self.assertIs(x.y, None)
20582073

20592074
def test_implicit_context(self):
20602075
Decimal = self.decimal.Decimal

Modules/_decimal/_decimal.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2338,14 +2338,14 @@ PyDecType_FromFloat(PyTypeObject *type, PyObject *v,
23382338
return dec;
23392339
}
23402340

2341-
/* Return a new PyDecObject (subtype) from a Decimal. */
2341+
/* Return a new PyDecObject or a subtype from a Decimal. */
23422342
static PyObject *
23432343
PyDecType_FromDecimalExact(PyTypeObject *type, PyObject *v, PyObject *context)
23442344
{
23452345
PyObject *dec;
23462346
uint32_t status = 0;
23472347

2348-
if (type == Py_TYPE(v)) {
2348+
if (type == &PyDec_Type && PyDec_CheckExact(v)) {
23492349
Py_INCREF(v);
23502350
return v;
23512351
}

0 commit comments

Comments
 (0)