• Guido van Rossum's avatar
    Change the binary operators |, &, ^, - to return NotImplemented rather · dc61cdf6
    Guido van Rossum yazdı
    than raising TypeError when the other argument is not a BaseSet.  This
    made it necessary to separate the implementation of e.g. __or__ from
    the union method; the latter should not return NotImplemented but
    raise TypeError.  This is accomplished by making union(self, other)
    return self|other, etc.; Python's binary operator machinery will raise
    TypeError.
    
    The idea behind this change is to allow other set implementations with
    an incompatible internal structure; these can provide union (etc.) with
    standard sets by implementing __ror__ etc.
    
    I wish I could do this for comparisons too, but the default comparison
    implementation allows comparing anything to anything else (returning
    false); we don't want that (at least the test suite makes sure
    e.g. Set()==42 raises TypeError).  That's probably fine; otherwise
    other set implementations would be constrained to implementing a hash
    that's compatible with ours.
    dc61cdf6
sets.py 17.8 KB