> # 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

Reply via email to