A question about Python Classes

Carl Banks pavlovevidence at gmail.com
Fri Apr 22 21:47:02 CEST 2011


On Thursday, April 21, 2011 11:00:08 AM UTC-7, MRAB wrote:
> On 21/04/2011 18:12, Pascal J. Bourguignon wrote:
> > chad<cda... at gmail.com>  writes:
> >
> >> Let's say I have the following....
> >>
> >> class BaseHandler:
> >>      def foo(self):
> >>          print "Hello"
> >>
> >> class HomeHandler(BaseHandler):
> >>      pass
> >>
> >>
> >> Then I do the following...
> >>
> >> test = HomeHandler()
> >> test.foo()
> >>
> >> How can HomeHandler call foo() when I never created an instance of
> >> BaseHandler?
> >
> > But you created one!
> >
> No, he didn't, he created an instance of HomeHandler.
> 
> > test is an instance of HomeHandler, which is a subclass of BaseHandler,
> > so test is also an instance of BaseHandler.
> >
> test isn't really an instance of BaseHandler, it's an instance of
> HomeHandler, which is a subclass of BaseHandler.

I'm going to vote that this is incorrect usage.  An instance of HomeHandler is also an instance of BaseHandler, and it is incorrect to say it is not.  The call to HomeHandler does create an instance of BaseHandler.

The Python language itself validates this usage.  isinstance(test,BaseHandler) returns True.


If you are looking for a term to indicate an object for which type(test) == BaseHandler, then I would suggest "proper instance".  test is an instance of BaseHandler, but it is not a proper instance.


Carl Banks



More information about the Python-list mailing list