En Sun, 30 Mar 2008 19:59:14 -0300, Fish <[EMAIL PROTECTED]> escribió:
> Hello Folks, > I am reading a CSV file and based on that I am creating TestCase(my > own defined class) objects in a for loop. The problem is each time I > create a new TestCase object in loop, previous objects data is already > copied in that object. See this FAQ entry: http://www.python.org/doc/faq/general/#why-are-default-values-shared-between-objects > ======= Problem Code > > The function snippet reading CSV and creating TestCase objects is > [code] > tcLst = [] > # CSV file is read in variable 'lines' Try to use the standard csv module instead; it's fairly easy. > def returnTcLst(path): > fp = open(path) > lines = fp.readlines() > for line in lines: Instead of those two lines, you could use: for line in fp: (readlines() has to read the whole file into memory; files are their own line iterators) > tc.setPcap(line[:i].strip()) getters/setters are not usually used in Python because they offer no advantage over directly using an attribute: tc.pcap = line[:i].strip() > tcLst.append(tc) > del tc Why "del tc"? That doesn't invoke the destructor, just removes the name "tc" from the local namespace. (The object tc refers to isn't destroyed yet because it has at least one reference: it's contained in the tcLst list) > class TestCase(object): > def __init__(self, pcap = None, sids = []): > self.__Pcap = pcap > self.__lstSid = sids As you can see in the FAQ entry, the common idiom is to write: def __init__(self, pcap = None, sids = None): if sids is None: sids = [] self.Pcap = pcap self._lstSid = sids Note that I've changed the __names; use __ when you expect a name collision with a subclass. For "implementation only" attributes, use a single underscore; based on your appendSid method, lstSid looks like it's used in this way. > def setPcap(self, path): > self.__Pcap = path This method isn't necesary anymore. > def appendSid(self, sid): > def __str__(self): Should be changed accordingly. -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list