On Sat, May 26, 2018 at 7:22 PM, Michael Lohmann <[email protected]> wrote:
> [Chris Angelico]
>> Does that make sense?
> Well yes, of course it does. When instantiating a HawaiianPizza of course you
> want to set size and price. I don’t want to remove **kwargs and the current
> way of handeling this. But if you now add:
> class Lasagna:
> def __init__(self, *, number_of_layers=5):
> print("This Lasagna has %s layers", number_of_layers)
>
> class HaveYouEverTriedThis(Pizza, Lasagna):
> """Well, this is just bizarre"""
>
> Now suddenly `Pizza` would have to accept kwargs. Why????????? It didn’t
> "learn anything new". It can’t do anything with them on it’s own. Shouldn’t
> you expect from a function that in the brackets you are shown what is
> possible to actually call this function on? You could never actually call
> Pizza with kwargs, so 1) Why should you be able to do so in the first place?
> and 2) Why show the programmer that you could?. Just to make the MRO work.
> And I would suggest that to handle this it would be a lot more elegant to
> say: "If you are in the middle of an MRO: just pass everything unexpected
> down“
>
Right, which means that Pizza and Lasagna are not compatible classes
in that way. If you were to try to concoct some sort of, I don't know,
layered conglomerate with meat, tomato, and pizza bases, you'd have to
write an init method that does that for you.
class Pizzagna(Pizza, Lasagna):
def __init__(self, *, number_of_layers, **kw):
Lasagna.__init__(self, number_of_layers=number_of_layers)
Pizza.__init__(self, **kw)
The Pizza class was deliberately designed to be an apex class - one
that is the head of a hierarchy. The Lasagna class isn't part of that
hierarchy, so merging it in takes some extra work - a pizza can't
automatically subsume a lasagna.
We had the family over here for dinner tonight, and we ate two pizzas.
Now I'm wondering if a Pizzagna would have been a better choice...
Anyhow. Further discussion about this should probably go onto python-list.
ChrisA
_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/