> 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
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to