Storing records from a parsed file

Steve Holden steve at
Sat Sep 30 16:53:22 CEST 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.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?

Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC/Ltd
Skype: holdenweb
Recent Ramblings

More information about the Python-list mailing list