id( ) function question

Christian Heimes lists at cheimes.de
Thu Oct 15 17:57:26 CEST 2009


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




More information about the Python-list mailing list