> Right, which means that Pizza and Lasagna are not compatible classes
> in that way.
Okay, let me try it one final time with the original pizza example. Let’s
assume that your restaurant has a special offer on all Hawaiian Pizzas where
you can get all sizes for 10$. Now the only reasonable thing to pass into **kw
is size, so let’s say that for the readability of the class we decide to
replace it.
class Pizza:
def __init__(self, *, size, price):
print("The price of this %s pizza is:", (size, price))
class HawaiianPizza(Pizza):
def __init__(self, *, pineapple="chunked", size=8): # No **kw here
since no longer needed
print("This pizza has %s pineapple." % pineapple)
super().__init__(price=10, size=size)
class CheesyCrust(Pizza):
"""Mixin to alter the pizza's crust"""
def __init__(self, *, crust_cheese="cheddar", surcharge=1.50):
print("Surcharge %.2f for %s crust" % (surcharge, crust_cheese))
super().__init__(price=kw.pop("price") + surcharge, **kw)
class BestPizza(HawaiianPizza, CheesyCrust):
"""Actually, the best pizza is pepperoni. Debate away!"""
BestPizza(crust_cheese="gouda“) # Doesn’t work since Hawaii doesn’t bypass
it
But now the HawaiianPizza gets annoyed because it doesn’t know what to do with
the crust_cheese. So just to make BestPizza work I will have to add **kw to
HawaiianPizza again.
But now let’s say we have a hungry programmer that just takes a short look and
sees that HawaiianPizza is a subclass of Pizza and he thinks "Okay then, just
get some HawaiianPizza(price=8)". In fact if he directly orders any
HawaiianPizza there is nothing he can pass in into **kw that wouldn’t result in
an error.
I am sorry to annoy you all with this. Maybe this problem just isn’t as common
as I thought it was…
Michael
_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/