can i implement virtual functions in python ?

logistix at cathoderaymission.net logistix at cathoderaymission.net
Tue Sep 30 23:32:02 CEST 2003


prabua at hotmail.com (Prabu) wrote in message news:<e73c30c6.0309300653.24456567 at posting.google.com>...
> Hi,
> 
> I'm new to python, so excuse me if i'm asking something dumb. 
> Does python provide a mechanism to implement virtual functions?
> Can you please give a code snippet also...:)
> Thanx in advance
> -Prabu.

As others have mentioned, all methods are overridable in python.  But
if you want to create a genuine Abstract Base Class, raise
NotImplementedErrors for the virual methods.  People will tell you
that this is not 'pythonic' (you should be using hasattr() to test for
interfaces) but I still find it useful from time to time.

PythonWin 2.3.2c1 (#48, Sep 30 2003, 09:28:31) [MSC v.1200 32 bit
(Intel)] on win32.
Portions Copyright 1994-2001 Mark Hammond (mhammond at skippinet.com.au)
- see 'Help/About PythonWin' for further copyright information.
>>> class virtualClass:
...     def __init__(self):
...         pass
...     def virtualMethod1(self):
...         raise NotImplementedError("virtualMethod1 is virutal and
must be overridden.")
...     def concreteMethod1(self):
...         print "The concrete method is implemented"
... 
		
>>> x = virtualClass()

>>> x.concreteMethod1()
The concrete method is implemented

>>> x.virtualMethod1()
Traceback (most recent call last):
  File "<interactive input>", line 1, in ?
  File "<interactive input>", line 5, in virtualMethod1
NotImplementedError: virtualMethod1 is virutal and must be overridden.

>>> class subClass(virtualClass):
...     def virtualMethod1(self):
...         print "sub class implemented virtualMethod1"
... 
		
>>> y = subClass()

>>> y.concreteMethod1()
The concrete method is implemented

>>> y.virtualMethod1()
sub class implemented virtualMethod1

>>>




More information about the Python-list mailing list