[Python-Dev] Advice on numbers.py implementation of binary mixins.
Jim Jewett
jimjjewett at gmail.com
Sun Jun 15 03:54:36 CEST 2008
Raymond Hettinger wrote:
> PEP-3141 outlines an approach to writing binary
> operators to allow the right operand to override
> the operation if the left operand inherits the
> operation from the ABC.
> Here is my first approximation at how to write
> them for the Integral mixins:
> class Integral(Rational):
> def __and__(self, other):
> if isinstance(other, (type(self), int, long)): # XXX
> return int(self) & int(other)
I think for this mixin, it doesn't matter whether other is an Integral
instance; it matter whether it is has a more specific solution.
So instead of checking whether isinstance, check whether its __rand__
method is Integral.__rand__.
I think you also may want to guard against incomplete right-hand
operations, by doing something like replacing the simple
> return NotImplemented
with
try:
val = other.__rand__(self)
if val is not NotImplemented:
return val
except (TypeError, AttributeError):
pass
# Use the generic fallback after all
return int(self) & int(other)
More information about the Python-Dev
mailing list