newbie-question: abstract classes

Erik Max Francis max at alcyone.com
Sat Sep 14 18:16:16 EDT 2002


"T. Kaufmann" wrote:

> I want to create an abstract class but it doesn't work.
> What' s wrong here?
> 
> class Abstract:
> 
>      def __init__(self): return

As others have pointed out, it's strange to have an explicit return
statement in .__init__.  Better would be to use pass when the .__init__
method is truly empty; otherwise it's not necessary.

> class Concrete:

You don't say how it doesn't work, but one obvious issue here is that
Concrete doesn't derive from Abstract.  This should read:

	class Concrete(Abstract):
	    ...

An idiom I use for abstract classes is to have its .__init__ method
check to make sure that it truly is something other than the base class.

	class Abstract:
	    def __init__(self):
	        if self.__class__ is Abstract:
	            raise NotImplementedError

	    def method(self): raise NotImplementedError

	class Concrete(Abstract):
	    def __init__(self):
	        Abstract.__init__(self)

	    def method(self): print "in Concrete.method"

Now even trying to create an instance of the Abstract class will result
in an exception.

-- 
 Erik Max Francis / max at alcyone.com / http://www.alcyone.com/max/
 __ San Jose, CA, US / 37 20 N 121 53 W / ICQ16063900 / &tSftDotIotE
/  \ A man that studieth revenge keeps his own wounds green.
\__/ Francis Bacon
    Sade Deluxe / http://www.sadedeluxe.com/
 The ultimate Sade encyclopedia.



More information about the Python-list mailing list