> # ok, both methods work and give the expected results > # so i presume they are different methods. > >>>>id(a.m1) > > 9202984 > >>>>id(a.m2) > > 9202984 > >>>>id(a.m1)==id(a.m2) > > True > # Huh? They seem to be the same.
What you observe is rooted in two things: - python objects bound methods are created on demand. Consider this example: class Foo: def m(self): pass f = Foo() m1 = f.m m2 = f.m print id(m1), id(m2) The reason is that the method iteself is bound to the instance - this creates a bound method each time. The other thing is that this bound method instances are immediaty garbage collected when you don't keep a reference. That results in the same address being used for subsequent bound method instantiations: print id(f.m) print id(f.m) results in the same id being printed. It doesn't matter if you use m1, m2 instead, as in your example. HTH, Diez -- http://mail.python.org/mailman/listinfo/python-list