Ben wrote:
Apologies if this is te wrong place to post - I realise the question
is pretty basic...
I have a simple python script that parses a text file and extracts data
from it. Currently
this data is stored in a list by a function, each element of which is
an instance of a class with
member variables to take the data. So for example I have:
camera_list.append(camera(alpha,beta,gamma....))
where
class camera:
def __init__(self,name,site,address,text):
self.name=name
self.site=site
self.address=address
self.text=text
Every time I append an item to this list I pass in the constructor
parameters so end up with all my data in the list which can then be
accessed by doing myList[x].name (for example)
This seemed like a nice solution until I tried to put the entire
parsing program into its own class. I did this so that I could parse
different types of file:
thistype.getdata()
thattype.getdata()
....
thisfile and thatfile would have the same function definitions, but
different implementations as needed.
But now my list generating funtion needs to create inner "camera"
classes when it is itself a member funcition of a class. This seems to
be causing problems - I coudl possibly use nested dictionaries, but
this sounds messy. Ideally I would use structs defined inside the
outer class, but pythn doesn't seem to support these.
I hope I haven't rambled too much here - I'm new to python so have
probably done some silly things :-)
Sounds like a fairly simple problem, but just the kind to tax a beginner ...
I think you are mistaken in your belief that the camera classes have to
be declared inside the file-handler classes: it's quite possible to
declare them independently and use them anyway. Here's a class whose
method creates an instance of another class and returns it (though it
could of course just as easily return a list of such objects):
In [9]: class Camera1:
...: def __init__(self, p1, p2):
...: self.p1 = p1
...: self.p2 = p2
...:
In [10]: class Camera2:
....: def __init__(self, p1, p2):
....: self.p1 = p1
....: self.p2 = p2
....:
In [11]: class factory:
....: def CreateCamera(self, x):
....: if x == 1:
....: return Camera1("a", "b")
....: else:
....: return Camera2("x", "y")
....:
In [12]: f = factory()
In [13]: c1 = f.CreateCamera(1)
In [14]: c2 = f.CreateCamera("something else")
In [15]: c1
Out[15]: <gs.model.Camera1 instance at 0x017E99E0>
In [16]: c2
Out[16]: <gs.model.Camera2 instance at 0x0180D940>
Does this help?
regards
Steve
--
Steve Holden +44 150 684 7255 +1 800 494 3119
Holden Web LLC/Ltd
http://www.holdenweb.com
Skype: holdenweb
http://holdenweb.blogspot.com
Recent Ramblings
http://del.icio.us/steve.holden