nested class problem

Peter Otten __peter__ at web.de
Sat Jan 24 17:11:17 EST 2004


Stephane Ninin wrote:

> I am trying to play with nested class in a script I am making,
> and I am not sure I really understand how they work.

[..]
>     
> class _PTest(ITest):
> 
>     class _PHandler(object):
>         
>         def __init__(self):
>             super(_PHandler,self).__init__()

Make that
              super(_PTest._PHandler, self).__init__()

or, even better, omit it entirely. Python class hierarchies tend to remain
flat, because inheritance is only necessary for code reuse, not to indicate
a particular interface.

>             #self.__map={}
> 
>         def test(self):
>             pass
>         
>     def __init__(self):
>         super(_PTest,self).__init__()
> 
> 
>     def read(self,filename):
>         super(_PTest,self).read(filename)
>         print "HERE"
>         print dir()
>         print dir(self)
>         print self.__class__
>         print dir(self.__class__)
>         dh = self._PHandler()
>         #dh.test()
> 
> if __name__=='__main__':
> 
>     a=ITest.make_reader()
>     print dir(a)
>     b=a.read("")
>     print b
>     
> 
> 
> 
> I want to put class _PHandler in _Ptest,
> and use _PHandler in _Ptest methods,
> but anything I try doesnot work...

I think that's you fighting against the language and - a rare case - python
fighting back :-)

> 
> On this configuration, I have:
> Traceback (most recent call last):
>   File "./test.py", line 58, in ?
>     b=a.read("")
>   File "./test.py", line 51, in read
>     dh = self._PHandler()
>   File "./test.py", line 34, in __init__
>     super(_PHandler,self).__init__()
> NameError: global name '_PHandler' is not defined
> 
> and I have similar problems if I try to access _PHandler
> in different ways...
> Is this possible somehow ? Or what is the problem with my approach ?
> I know I could just dont use nested classes.., but I'd like to try.

I fail to see the benefit of nested classes. If you want to bring some
structure into your python application, try packages instead.

Peter



More information about the Python-list mailing list