[Python-ideas] Consider (one day) adding an inheritance order class precedence mechanism
Neil Girdhar
mistersheik at gmail.com
Mon Nov 20 21:42:47 EST 2017
More information about the Python-ideas mailing list
Mon Nov 20 21:42:47 EST 2017
- Previous message (by thread): [Python-ideas] Consider (one day) adding an inheritance order class precedence mechanism
- Next message (by thread): [Python-ideas] Consider (one day) adding an inheritance order class precedence mechanism
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Mon, Nov 20, 2017 at 9:34 PM Nick Coghlan <ncoghlan at gmail.com> wrote: > On 21 November 2017 at 11:09, Neil Girdhar <mistersheik at gmail.com> wrote: > > > > On Sat, Nov 18, 2017 at 9:29 PM Nick Coghlan <ncoghlan at gmail.com> wrote: > >> > >> >>> class C: pass > >> ... > >> >>> class S(C): pass > >> ... > >> >>> class E: pass > >> ... > >> >>> class B(S, E): pass > >> ... > >> >>> class R(E, C): pass > >> ... > >> >>> class Z(B, S, R, E, C): pass > >> ... > >> Traceback (most recent call last): > >> File "<stdin>", line 1, in <module> > >> TypeError: Cannot create a consistent method resolution order > >> (MRO) for bases C, E > > > Sorry, I wrote back too quickly. I meant also to change B's requested > MRO > > to be: > > > > (B, S, E, C) > > > > It works with that change. > > Right, but once you do that, then the existing resolver is already > able to handle things: > > >>> class C: pass > ... > >>> class S(C): pass > ... > >>> class E: pass > ... > >>> class B(S, E, C): pass > ... > >>> class R(E, C): pass > ... > >>> class Z(B, R): pass > ... > >>> > Sure, but like I mentioned, that's really ugly because B doesn't care about C and shouldn't have to mention it as a base class. This solution can quickly spiral out of control so that changes in the inheritance graph require you to hunt down extraneous base classes. > > If you wanted to pick up cases where two classes generate inconsistent > MROs that will prevent mutual subclasses (like "class B(S, E)" vs > "class R(E, C)"), yes, exactly. > that feels like a job for a type checker, since it > isn't obvious whether it's the definition of B or the definition of R > that should be changed to reorder their MRO. > I don't know what the "type checker" means here. I figured that the easiest user specification would be precedence relationships between classes that could be applied (in the way I described). And I figured that that could be processed for given classes when their MRO is generated. The proposal of having a custom MRO generator would also be able to solve this problem. > Cheers, > Nick. > > -- > Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-ideas/attachments/20171121/c522de4f/attachment.html>
- Previous message (by thread): [Python-ideas] Consider (one day) adding an inheritance order class precedence mechanism
- Next message (by thread): [Python-ideas] Consider (one day) adding an inheritance order class precedence mechanism
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-ideas mailing list