taskName and scanList are defined at the class level making them class attributes. Each instance of the ScannerCommand class will share its class attributes. What you want are instance attributes which can be initialized whithin the constructor like so:
>>> class ScannerCommand: ... def __init__(self): ... self.taskName = '' ... self.scanList = [] ... print "Creating a ScannerCommand object; list has " + \ ... str(len(self.scanList)) + " objects." [EMAIL PROTECTED] wrote: > Greetings! > > Here's my script: > > ######## start of script > class ScannerCommand: > taskName = '' > scanList = [] > > def __init__(self): > print "Creating a ScannerCommand object; list has " + \ > str(len(self.scanList)) + " objects." > > class Scanner: > def Read(self, data): > command = ScannerCommand() > command.scanList.append(data) > return command > > class Handler: > def Process(self, dataList): > print "Processing data" > for data in dataList: > print " " + data > print "Finished processing data." > > if __name__ == '__main__': > s = Scanner() > count = 0 > for data in ["Zero", "One", "Two", "Three"]: > command = s.Read(data) > handler = Handler() > handler.Process(command.scanList) > ############## End of script > > Here's the result: > > ########## Start of result > Processing data > Zero > Finished processing data. > Creating a ScannerCommand object; list has 1 objects. > Processing data > Zero > One > Finished processing data. > Creating a ScannerCommand object; list has 2 objects. > Processing data > Zero > One > Two > Finished processing data. > Creating a ScannerCommand object; list has 3 objects. > Processing data > Zero > One > Two > Three > Finished processing data. > ################ End of result > > I had expected to get "Zero" by itself, then "One" by itself, and so > on. > > Why is the ScannerCommand object being created with a scanList that > contains the data that was in the previously created ScannerCommand > object? And what do I have to do to ensure that the code that is run > when I call ScannerCommand() gives me an object with an empty scanList? > > I am a C++ developer in a shop that uses some Python as well, and I > just ran across this behavior for the first time. I believe it is due > to the difference between binding a variable to an object, as Python > does, and actually creating the variable, as a similar C++ application > would do. > > Thank you very much. > > Rob Richardson > RAD-CON, Inc. > Bay Village, OH -- http://mail.python.org/mailman/listinfo/python-list