Mel wrote: > As Python has evolved the semantics have got richer, and the implementation > has got trickier with proxy objects and wrapped functions and more. > Whatever use there was for `is` in ordinary code is vanishing.
'is' has important use cases but it's not trivial to use if you leave the road. > Even a straight-up assignment can fool: > > Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41) > [GCC 4.3.3] on linux2 > Type "help", "copyright", "credits" or "license" for more information. >>>> class A(object): > .... def __init__ (self): > .... self.mangler = self.method1 > .... def method1 (self): > .... return id (self) ^ 30103 > .... def is_mangled (self): > .... return self.mangler is self.method1 > .... >>>> a=A() >>>> a.is_mangled() > False > > I fully understand that there's an excellent reason for that -- I wouldn't > have it any other way. Also note that, in the same example > >>>> a.mangler == a.method1 > True Even "obj.method is obj.method" doesn't return true because Python creates a new method wrapper for every attribute access: >>> class Example(object): ... def func(self): ... pass ... >>> Example.func <unbound method Example.func> >>> Example.func is Example.func False Christian -- http://mail.python.org/mailman/listinfo/python-list