S
Stephane Ninin
Hello all,
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.
Here is some code:
__all__ = ["ITest"]
from exceptions import Exception
class ITest(object):
def __init__(self):
if (self.__class__ == ITest):
raise Exception("ITest cannot be instanciated")
def read(self,filename):
self.__filename = filename
def _getFilename(self):
return self.__filename
def make_reader():
return _PTest()
make_reader = staticmethod(make_reader)
class _PTest(ITest):
class _PHandler(object):
def __init__(self):
super(_PHandler,self).__init__()
#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...
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.
Thanks in advance.
Regards,
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.
Here is some code:
__all__ = ["ITest"]
from exceptions import Exception
class ITest(object):
def __init__(self):
if (self.__class__ == ITest):
raise Exception("ITest cannot be instanciated")
def read(self,filename):
self.__filename = filename
def _getFilename(self):
return self.__filename
def make_reader():
return _PTest()
make_reader = staticmethod(make_reader)
class _PTest(ITest):
class _PHandler(object):
def __init__(self):
super(_PHandler,self).__init__()
#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...
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.
Thanks in advance.
Regards,