2013-07-09 3 views
-1

Специальная работа __cmp__ не работает. Скажем, следующий код:Специальный метод __cmp__ не работает

class Test(): 
     def __cmp__(self, other): 
      return False 

t1 = Test() 
t2 = t1 

print t2 == t1 

я должен получить значение False, потому что CMP всегда возвращается значение False. Но на самом деле, python печатает True для меня.

Любое предложение?

+4

Это не может быть реальный код, так как '__cmp__' принимает * два * параметра (self и другие). Если вы запустили его, вы получите '__cmp __() принимает ровно 1 аргумент (2 заданный)'. –

+1

Спасибо, Даниэль, я изменил свой вопрос. я просто пропустил второй параметр. – Geoffrey

+0

Не знаете, почему голоса закрываются, а не большой вопрос, но не вне темы. Я голосовал, чтобы оставаться открытым. –

ответ

5

__cmp__ должен возвращать -1, 0 или 1, что свидетельствует о его ниже, равно или выше, чем other. Возвращение False на самом деле сделает его сравнимым как все, так как целочисленное значение False равно 0.

class Test(): 
     def __cmp__(self, other): 
      return -1 

отметить также, что __cmp__ является устаревшим и игнорируется в Python 3. Вы должны осуществлять __eq__ и другой так называемый rich comparison operators вместо этого.

+0

спасибо, Леннарт, моя версия python - 2.6.2. – Geoffrey

+0

Привет, Леннарт, я использую 2.6.2 и просто использую __cmp__ для изучения специального метода Python. также, вы правы, этот метод должен принимать 2 параметра. Я обновил свой вопрос. – Geoffrey

+0

Привет, Ленарт, вы правы. если пусть __cmp__ всегда возвращает 1 или -1, я получаю False по t1 == t2, на противоположном, если пусть __cmp__ возвращает 0 или False, получит значение True с помощью t1 == t2. – Geoffrey

Смежные вопросы