Le vendredi 08 septembre 2006 10:15, Bruno Desthuilliers a écrit :
> You
> mentioned NotImplementedError, which is indeed the usual way to make
> something "abstract" in Python.

Hummm, some more thoughts about this.

I can imagine class hierarchies where the presence of not implemented methods 
doesn't mean that the class is actually an abstract one. Even if partial 
implementation is not a common scheme it can save you from writing a lot of 
classes.

For example :

class car : #abstract
        def accelerate() : raise NotimplementedError
        def getBaseBuildPrice() : raise NotimplementedError
        def getOptionsPrice() : raise NotimplementedError
        def getPublicPrice() : raise NotimplementedError

class SerieA(car) :
        """abstract, it's before the car
        get out of the factory"""
        def accelerate() : ...
        def getBaseBuildPrice() : ...

class CrashTestVendorSerieA(SerieA) :
        """concrete, but doesn't
        implement getPublicPrice"""
        def getOptionsPrice() : ...

class CommercialSerieA(SerieA) :
        def getOptionsPrice() : ...
        def getPublicPrice() : ....

Doing the same with more traditional object design give :

class car : #abstract
        def accelerate() : raise NotimplementedError
        def getBaseBuildPrice() : raise NotimplementedError

class SerialCar : #abstract
        def getOptionsPrice() : raise NotimplementedError

class ComercialCar : #abstract
        def getPublicPrice() : raise NotimplementedError

class SerieA(car, SeriialCar) : #abstract
        def accelerate() : ...
        def getBaseBuildPrice() : ...

class CrashTestVendorSerieA(SerieA) : # concrete
        def getOptionsPrice() : ...

class CommercialSerieA(SerieA, CommercialCar) : # concrete
        def getOptionsPrice() : ...
        def getPublicPrice() : ...

And this can become a true spider net for more complicated cases. Obviously, 
in practice we will choose alternatives to inheritance (strategies, 
visitors, ...) to work with such complex situations, but it seems to me that 
partial implementation is not a bad choice, specifically in regard to duck 
typing.


-- 
_____________

Maric Michaud
_____________

Aristote - www.aristote.info
3 place des tapis
69004 Lyon
Tel: +33 426 880 097
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to