Josh Rosenberg <shadowranger+pyt...@gmail.com> added the comment:

Serhiy: Is there a reason not to use the functools.total_ordering decorator on 
TimerHandle, so you can get rid of __le__/__ge__/__gt__ rather than fixing them 
individually? I notice at least one behavioral difference (total_ordering's 
le/ge methods use ==/!= for the fallback comparison, where TimerHandle 
explicitly calls __eq__) which this would eliminate, along with reducing the 
code to maintain.

Specifically, the total_ordering fallbacks work if the provided operator (e.g. 
__lt__) works and either side provides a functional __eq__/__ne__, as 
appropriate (even if the other side *can't* provide the complementary 
inequality operator, e.g. __gt__). TimerHandle's behavior differs; it's all or 
nothing (so if __lt__ works, but __eq__ fails, then the success of __lt__ 
doesn't matter, the other side has to do everything).

I'm not saying total_ordering is necessarily correct (it does seem a bit odd 
that A <= B can return True based on a mix of results, one from A.__lt__, one 
from B.__eq__), but constantly reimplementing these fallback operations has 
been a source of subtle bugs so often, that I'd rather depend on a single 
common implementation, and debate tweaks to it there, rather than having it 
reimplemented slightly differently in a million different places.

I don't think import times for functools should be a problem; looks like at 
least four asyncio submodules import it, including asyncio.format_helpers 
(which asyncio.events takes a direct dependency on), so if you're using 
asyncio.events, you're already importing functools anyway.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue37685>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to