Commit 2808d3c4 authored by Benjamin Peterson's avatar Benjamin Peterson

Merged revisions 71627 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r71627 | benjamin.peterson | 2009-04-15 16:26:36 -0500 (Wed, 15 Apr 2009) | 4 lines

  call __float__ on str subclasses #5759

  tests by R. David Murray
........
parent 50a14695
...@@ -78,11 +78,18 @@ class GeneralFloatCases(unittest.TestCase): ...@@ -78,11 +78,18 @@ class GeneralFloatCases(unittest.TestCase):
def __float__(self): def __float__(self):
return 42 return 42
# Issue 5759: __float__ not called on str subclasses (though it is on
# unicode subclasses).
class FooStr(str):
def __float__(self):
return float(str(self)) + 1
self.assertAlmostEqual(float(Foo0()), 42.) self.assertAlmostEqual(float(Foo0()), 42.)
self.assertAlmostEqual(float(Foo1()), 42.) self.assertAlmostEqual(float(Foo1()), 42.)
self.assertAlmostEqual(float(Foo2()), 42.) self.assertAlmostEqual(float(Foo2()), 42.)
self.assertAlmostEqual(float(Foo3(21)), 42.) self.assertAlmostEqual(float(Foo3(21)), 42.)
self.assertRaises(TypeError, float, Foo4(42)) self.assertRaises(TypeError, float, Foo4(42))
self.assertAlmostEqual(float(FooStr('8')), 9.)
def test_floatasratio(self): def test_floatasratio(self):
for f, ratio in [ for f, ratio in [
......
...@@ -12,6 +12,8 @@ What's New in Python 3.1 beta 1? ...@@ -12,6 +12,8 @@ What's New in Python 3.1 beta 1?
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #5759: float() didn't call __float__ on str subclasses.
- The string.maketrans() function is deprecated; there is a new static method - The string.maketrans() function is deprecated; there is a new static method
maketrans() on the bytes and bytearray classes. This removes confusion about maketrans() on the bytes and bytearray classes. This removes confusion about
the types string.maketrans() is supposed to work with, and mirrors the the types string.maketrans() is supposed to work with, and mirrors the
......
...@@ -1533,7 +1533,9 @@ float_new(PyTypeObject *type, PyObject *args, PyObject *kwds) ...@@ -1533,7 +1533,9 @@ float_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
return float_subtype_new(type, args, kwds); /* Wimp out */ return float_subtype_new(type, args, kwds); /* Wimp out */
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:float", kwlist, &x)) if (!PyArg_ParseTupleAndKeywords(args, kwds, "|O:float", kwlist, &x))
return NULL; return NULL;
if (PyUnicode_Check(x)) /* If it's a string, but not a string subclass, use
PyFloat_FromString. */
if (PyUnicode_CheckExact(x))
return PyFloat_FromString(x); return PyFloat_FromString(x);
return PyNumber_Float(x); return PyNumber_Float(x);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment