On Fri, Jan 6, 2017 at 3:59 AM Paul Moore <p.f.mo...@gmail.com> wrote:
> On 6 January 2017 at 07:26, Neil Girdhar <mistersh...@gmail.com> wrote: > > On Fri, Jan 6, 2017 at 2:07 AM Stephen J. Turnbull > > <turnbull.stephen...@u.tsukuba.ac.jp> wrote: > >> > >> Neil Girdhar writes: > >> > >> > I don't understand this? How is providing a default method in an > >> > abstract base class a pessimization? If it happens to be slower > >> > than the code in the current methods, it can still be overridden. > >> > >> How often will people override until it's bitten them? How many > >> people will not even notice until they've lost business due to slow > >> response? If you don't have a default, that's much more obvious. > >> Note that if there is a default, the collections are "large", and > >> equality comparisons are "rare", this could be a substantial overhead. > > > > > > I still don't understand what you're talking about here. You're saying > that > > we shouldn't provide a __hash__ in case the default hash happens to be > > slower than what the user wants and so by not providing it, we force the > > user to write a fast one? Doesn't that argument apply to all methods > > provided by abcs? > > The point here is that ABCs should provide defaults for methods where > there is an *obvious* default. It's not at all clear that there's an > obvious default for __hash__. > > Unless I missed a revision of your proposal, what you suggested was: > > Yeah, looks like you missed a revision. There were two emails. I suggested adding ImmutableIterable and ImmutableSet, and so there is an obvious implementation of __hash__ for both. > > A better option is to add collections.abc.ImmutableIterable that derives > from Iterable and provides __hash__. > > So what classes would derive from ImmutableIterable? Frozenset? A > user-defined frozendict? There's no "obvious" default that would work > for both those cases. And that's before we even get to the question of > whether the default has the right performance characteristics, which > is highly application-dependent. > > It's not clear to me if you expect ImmutableIterable to provide > anything other than a default implementation of hash. If not, then how > is making it an ABC any better than simply providing a helper function > that people can use in their own __hash__ implementation? That would > make it explicit what people are doing, and avoid any tendency towards > people thinking they "should" inherit from ImmutableIterable and yet > needing to override the only method it provides. > > Paul >
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/