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 -- http://mail.python.org/mailman/listinfo/python-list