From: Raymond Hettinger Date: Tue, 20 Jan 2009 20:34:19 +0000 (+0000) Subject: Issue 4998: __slots__ on Fractions was useless. X-Git-Tag: v2.7a1~2234 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=933d3a7a5474d135e451980a42171a690bd2bd2d;p=python Issue 4998: __slots__ on Fractions was useless. --- diff --git a/Lib/numbers.py b/Lib/numbers.py index fa59fd8e7d..540e7d5910 100644 --- a/Lib/numbers.py +++ b/Lib/numbers.py @@ -17,6 +17,7 @@ class Number(object): caring what kind, use isinstance(x, Number). """ __metaclass__ = ABCMeta + __slots__ = () # Concrete numeric types must provide their own hash implementation __hash__ = None @@ -41,6 +42,8 @@ class Complex(Number): type as described below. """ + __slots__ = () + @abstractmethod def __complex__(self): """Return a builtin complex instance. Called for complex(self).""" @@ -172,6 +175,8 @@ class Real(Complex): Real also provides defaults for the derived operations. """ + __slots__ = () + @abstractmethod def __float__(self): """Any Real can be converted to a native float object. @@ -265,6 +270,8 @@ Real.register(float) class Rational(Real): """.numerator and .denominator should be in lowest terms.""" + __slots__ = () + @abstractproperty def numerator(self): raise NotImplementedError @@ -288,6 +295,8 @@ class Rational(Real): class Integral(Rational): """Integral adds a conversion to long and the bit-string operations.""" + __slots__ = () + @abstractmethod def __long__(self): """long(self)""" diff --git a/Lib/test/test_fractions.py b/Lib/test/test_fractions.py index a6c3c32cb0..0509f92ccb 100644 --- a/Lib/test/test_fractions.py +++ b/Lib/test/test_fractions.py @@ -394,6 +394,11 @@ class FractionTest(unittest.TestCase): self.assertEqual(id(r), id(copy(r))) self.assertEqual(id(r), id(deepcopy(r))) + def test_slots(self): + # Issue 4998 + r = F(13, 7) + self.assertRaises(AttributeError, setattr, r, 'a', 10) + def test_main(): run_unittest(FractionTest, GcdTest) diff --git a/Misc/NEWS b/Misc/NEWS index f8bfa005e9..9d234bdc2f 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -145,6 +145,10 @@ Core and Builtins Library ------- +- Issue #4998: The memory saving effect of __slots__ had been lost on Fractions + which inherited from numbers.py which did not have __slots__ defined. The + numbers heirarchy now has its own __slots__ declarations. + - Issue #3321: _multiprocessing.Connection() doesn't check handle; added checks for *nix machines for negative handles and large int handles. Without this check it is possible to segfault the interpreter.