From 2835e37be55ce054b6a80f1c7b99de65717f2a12 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 14 Feb 2003 03:42:11 +0000 Subject: SF bug #663701: sets module review Renamed hook methods to use the double underscore convention. --- Doc/lib/libsets.tex | 8 ++++---- Lib/sets.py | 14 +++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Doc/lib/libsets.tex b/Doc/lib/libsets.tex index 9c5998a..4d87a4f 100644 --- a/Doc/lib/libsets.tex +++ b/Doc/lib/libsets.tex @@ -203,23 +203,23 @@ before being added as a set element. The mechanism is to always add a hashable element, or if it is not hashable, the element is checked to see if it has an -\method{_as_immutable()} method which returns an immutable equivalent. +\method{__as_immutable__()} method which returns an immutable equivalent. -Since \class{Set} objects have a \method{_as_immutable()} method +Since \class{Set} objects have a \method{__as_immutable__()} method returning an instance of \class{ImmutableSet}, it is possible to construct sets of sets. A similar mechanism is needed by the \method{__contains__()} and \method{remove()} methods which need to hash an element to check for membership in a set. Those methods check an element for hashability -and, if not, check for a \method{_as_temporarily_immutable()} method +and, if not, check for a \method{__as_temporarily_immutable__()} method which returns the element wrapped by a class that provides temporary methods for \method{__hash__()}, \method{__eq__()}, and \method{__ne__()}. The alternate mechanism spares the need to build a separate copy of the original mutable object. -\class{Set} objects implement the \method{_as_temporarily_immutable()} +\class{Set} objects implement the \method{__as_temporarily_immutable__()} method which returns the \class{Set} object wrapped by a new class \class{_TemporarilyImmutableSet}. diff --git a/Lib/sets.py b/Lib/sets.py index 9604249..0824fb1 100644 --- a/Lib/sets.py +++ b/Lib/sets.py @@ -248,7 +248,7 @@ class BaseSet(object): try: return element in self._data except TypeError: - transform = getattr(element, "_as_temporarily_immutable", None) + transform = getattr(element, "__as_temporarily_immutable__", None) if transform is None: raise # re-raise the TypeError exception we caught return transform() in self._data @@ -325,7 +325,7 @@ class BaseSet(object): data[element] = value return except TypeError: - transform = getattr(element, "_as_immutable", None) + transform = getattr(element, "__as_immutable__", None) if transform is None: raise # re-raise the TypeError exception we caught data[transform()] = value @@ -335,7 +335,7 @@ class BaseSet(object): try: data[element] = value except TypeError: - transform = getattr(element, "_as_immutable", None) + transform = getattr(element, "__as_immutable__", None) if transform is None: raise # re-raise the TypeError exception we caught data[transform()] = value @@ -464,7 +464,7 @@ class Set(BaseSet): try: self._data[element] = True except TypeError: - transform = getattr(element, "_as_immutable", None) + transform = getattr(element, "__as_immutable__", None) if transform is None: raise # re-raise the TypeError exception we caught self._data[transform()] = True @@ -477,7 +477,7 @@ class Set(BaseSet): try: del self._data[element] except TypeError: - transform = getattr(element, "_as_temporarily_immutable", None) + transform = getattr(element, "__as_temporarily_immutable__", None) if transform is None: raise # re-raise the TypeError exception we caught del self._data[transform()] @@ -496,11 +496,11 @@ class Set(BaseSet): """Remove and return an arbitrary set element.""" return self._data.popitem()[0] - def _as_immutable(self): + def __as_immutable__(self): # Return a copy of self as an immutable set return ImmutableSet(self) - def _as_temporarily_immutable(self): + def __as_temporarily_immutable__(self): # Return self wrapped in a temporarily immutable set return _TemporarilyImmutableSet(self) -- cgit v0.12