тод equals(), который сравнивает два слова, игнорируя регистр. Так и есть, объект
класса Word, содержащий значение 'ha', будет считаться равным другому объекту,
который содержит значение 'HA'.
В следующем примере показана наша первая попытка, где мы вызываем обыч-
ный метод equals(). self.text — это текстовая строка, которую содержит объект
класса Word, метод equals() сравнивает ее с текстовой строкой, содержащейся в объ-
екте word2 (другой объект класса Word):
>>> class Word():
... def __init__(self, text):
Особые методы
173
... self.text = text
...
... def equals(self, word2):
... return self.text.lower() == word2.text.lower()
...
Далее создадим три объекта Word с помощью трех разных текстовых строк:
>>> first = Word('ha')
>>> second = Word('HA')
>>> third = Word('eh')
Когда строки 'ha' и 'HA' сравниваются в нижнем регистре, они должны быть
равными:
>>> first.equals(second)
True
Но строка 'eh' не совпадет со строкой 'ha':
>>> first.equals(third)
False
Мы определили метод equals(), который выполняет преобразование строки
в нижний регистр и сравнение. Однако было бы здорово, если бы мы могли просто
сказать first == second, как в случае встроенных типов Python. Реализуем такую
возможность. Мы изменим имя метода equals() на особое имя __eq__() (вы узнаете,
зачем я это сделал, через минуту):
>>> class Word():
... def __init__(self, text):
... self.text = text
... def __eq__(self, word2):
... return self.text.lower() == word2.text.lower()
...
Проверим, как это работает:
>>> first = Word('ha')
>>> second = Word('HA')
>>> third = Word('eh')
>>> first == second
True
>>> first == third
False
Магия! Все, что нам было нужно, — указать особое имя метода для проверки на
равенство __eq__(). В табл. 6.1 и 6.2 приведены имена самых полезных магических
методов.