recursion in __cmp__

  • Thread starter Victor Safronovich
  • Start date
V

Victor Safronovich

please comment this
Python 2.2.3 (#42, May 30 2003, 18:12:08) [MSC 32 bit (Intel)] on win32 def __cmp__(self, other):
print '%s|%s' %(`self`, `other`)
return cmp(self, other)
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
0
 
A

Alex Martelli

Victor Safronovich said:
please comment this
Python 2.2.3 (#42, May 30 2003, 18:12:08) [MSC 32 bit (Intel)] on win32def __cmp__(self, other):
print '%s|%s' %(`self`, `other`)
return cmp(self, other)

What is there to comment? This is obviously and blatantly recursive,
since cmp(a, b) delegates back to a.__cmp__(b) [[for classic classes;
for a newstyle class it would be type(a).__cmp__(a, b) with the same
recursive effect in this case]].

Just like the simpler example: def __len__(self): return len(self)


Alex
 
J

John Doe

Really Victor,
no one comments on old versions. Try it on 2.3.

Dan

please comment this
Python 2.2.3 (#42, May 30 2003, 18:12:08) [MSC 32 bit (Intel)] on win32def __cmp__(self, other):
print '%s|%s' %(`self`, `other`)
return cmp(self, other)
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|<__main__.A instance at 0x0097D120>
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
<__main__.A instance at 0x00989838>|5
0
 
P

Peter Otten

Victor said:
please comment this
Python 2.2.3 (#42, May 30 2003, 18:12:08) [MSC 32 bit (Intel)] on win32
def __cmp__(self, other):
print '%s|%s' %(`self`, `other`)
return cmp(self, other)

Does it get clearer with the following reimplementation of cmp()?
.... def __cmp__(self, other):
.... return mycompare(self, other)
........ try:
.... return a.__cmp__(b)
.... except AttributeError:
.... return mycompare(id(a), id(b))
....Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 3, in mycompare
File "<stdin>", line 3, in __cmp__
File "<stdin>", line 3, in mycompare
File "<stdin>", line 3, in __cmp__
[snip]
File "<stdin>", line 3, in __cmp__

Peter
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top