Raymond Hettinger <raymond.hettin...@gmail.com> added the comment:
> Why not expose the C implementation via a frozenset._hash() > classmethod, and change Set._hash() to merely call that? The frozenset.__hash__ method is tightly bound to the internals of real sets to take advantage of the hash values already being known for real sets. So we can't just expose it to ABC sets. Also, the ABC sets need to be kept in sync with an __eq__ method, so users really need to see what Set._hash is actually doing. Lastly, pure python hashable sets based on the ABC are not common, so it doesn't warrant a C fast path. If C fast paths were offered, the union, intersection, and difference methods would more important targets. So, thanks for the suggestion but it isn't as straight-forward as exposing existing code and it might make it harder for implementer to stay synced with an __eq__ method. Tangential thought: If you do implement __hash__ with Set._hash, consider using a cached_property decorator. ---------- nosy: +rhettinger resolution: -> rejected stage: -> resolved status: open -> closed type: -> performance versions: +Python 3.11 _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue46684> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com