Still considering distinguishing between different types of inheritance.  

Apart from object composition or mix-in style, I want to illustrate something 
regarding the "arrow" of inheritance.

class super_dict(dict):

    def __init__(self, init={}, default_value=0, collision_function=None):
       *expands what dict can do*

    def get_default(self):  #stupid method to illustrate a point
       return self._default_value

class specialized_dict(dict):

    def update(self, other):
        *change the behavior of how updates work*

    def setdefault(self, key, value):
        if key=sentinel:
            self[key]=0
        else:
            self[key]=value

These look like the standard is-a inheritance, but they are very different.  

The first goes upwards, making a super-class, the other drills downwards and 
makes dict more specialized.  The former expands on the capability and the API, 
the latter keeps the exact API but modifies the method behaviors.  The former 
becomes a more general type, the latter becomes a more specific type.

Steven D'Aprano was arguing a couple of years ago that there is no difference, 
one can simply turn the inheritance diagram upside-down.  But here it can be 
seen that that's not an option

Anyone else see the significance?  Sorry to be a PITA...

Mark
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to