> My understanding is that foo.bar does *not* create a new object.
Your understanding is not correct.
> All it
> does is return the value of the bar attribute of object foo. What new
> object is being created?
A bound method. This happens through the descriptor-protocol. Please see
this example:
class Foo(object):
def bar(self):
pass
f = Foo()
a = Foo.bar
b = f.bar
c = f.bar
print a, b, c
print id(b), id(c)
The result is this:
<unbound method Foo.bar> <bound method Foo.bar of <__main__.Foo object
at 0xbf650>> <bound method Foo.bar of <__main__.Foo object at 0xbf650>>
315560 788960
So b and c really are different objects - "a is not b == True"
Diez
--
http://mail.python.org/mailman/listinfo/python-list