Storing records from a parsed file
Steve Holden
steve at holdenweb.com
Sat Sep 30 10:53:22 EDT 2006
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
More information about the Python-list
mailing list