Emanuele D'Arrigo wrote:
Hi everybody,
I was unit testing some code today and I eventually stumbled on one of
those "is" issues quickly solved replacing the "is" with "==". Still,
I don't quite see the sense of why these two cases are different:
def aFunction():
... pass
...
f = aFunction
f is aFunction
True <--- Ok, this seems reasonable. Nevertheless, I suspect I
shouldn't quite rely on it.
class MyClass(object):
... def myMethod(self):
... pass
...
c = MyClass()
m = c.myMethod
m is c.myMethod
False <--- What? Why is that?
Compare that to MyClass.myMethod is MyClass.myMethod, which is True at
least in 3.0. Repeated attribute accesses may or may not return the
same object. Remember that class (and instance) attributes can be
computed properties, or produced by whatever means in __getattr__.
Also, x.a = b; x.a==b may or may not return True as the setting might be
intercepted by __setattr__.
tjr
--
http://mail.python.org/mailman/listinfo/python-list