mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
run total_ordering() tests, and fix the function (default comparisons shouldn't be considered)
This commit is contained in:
parent
7311729790
commit
9c2930e4be
2 changed files with 6 additions and 2 deletions
|
@ -65,6 +65,7 @@ def wraps(wrapped,
|
|||
return partial(update_wrapper, wrapped=wrapped,
|
||||
assigned=assigned, updated=updated)
|
||||
|
||||
_object_defaults = {object.__lt__, object.__le__, object.__gt__, object.__ge__}
|
||||
def total_ordering(cls):
|
||||
"""Class decorator that fills in missing ordering methods"""
|
||||
convert = {
|
||||
|
@ -81,7 +82,9 @@ def total_ordering(cls):
|
|||
('__gt__', lambda self, other: not other >= self),
|
||||
('__lt__', lambda self, other: not self >= other)]
|
||||
}
|
||||
roots = set(dir(cls)) & set(convert)
|
||||
roots = (set(dir(cls)) & set(convert))
|
||||
# Remove default comparison operations defined on object.
|
||||
roots -= {meth for meth in roots if getattr(cls, meth) in _object_defaults}
|
||||
if not roots:
|
||||
raise ValueError('must define at least one ordering operation: < > <= >=')
|
||||
root = max(roots) # prefer __lt__ to __le__ to __gt__ to __ge__
|
||||
|
|
|
@ -481,7 +481,7 @@ class TestTotalOrdering(unittest.TestCase):
|
|||
# new methods should not overwrite existing
|
||||
@functools.total_ordering
|
||||
class A(int):
|
||||
raise Exception()
|
||||
pass
|
||||
self.assert_(A(1) < A(2))
|
||||
self.assert_(A(2) > A(1))
|
||||
self.assert_(A(1) <= A(2))
|
||||
|
@ -564,6 +564,7 @@ def test_main(verbose=None):
|
|||
TestPartialSubclass,
|
||||
TestPythonPartial,
|
||||
TestUpdateWrapper,
|
||||
TestTotalOrdering,
|
||||
TestWraps,
|
||||
TestReduce,
|
||||
TestLRU,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue