Python: Don't use class attributes as default values for object attributes
This bit me today. If using class attributes as default values for object attributes works or not depends on the data type used. So it is best to stay away from the habit. If you are using a list, for example, its value will be shared among objects. Example code:
class Foo: messages = [] def append_message(self, m): self.messages.append(m) class Bletch: messages = "" def append_message(self, m): self.messages += m foo = Foo() foo.append_message('foo') bar = Foo() bar.append_message('bar') baz = Foo() baz.append_message('baz') print baz.messages # prints ['foo', 'bar', 'baz'] foo = Bletch() foo.append_message('foo') bar = Bletch() bar.append_message('bar') baz = Bletch() baz.append_message('baz') print baz.messages # prints 'baz' print foo.messages # prints 'foo'