Задача на python - Общение Python мододелов

Вопрос Задача на python

Регистрация
28 Авг 2013
Сообщения
107
Репутация
0
Спасибо
0
Монет
0
class LowerString(str):

def __str__(self):

return self.lower()







s1 = LowerString('BEEGEEK')

s2 = LowerString('BeeGeek')

print(s1 == s2)



False??? Почему?)
 
Регистрация
22 Ноя 2013
Сообщения
79
Репутация
0
Спасибо
0
Монет
0
В данном коде создается пользовательский класс LowerString, который наследуется от встроенного класса str. В этом классе переопределяется метод __str__(), который возвращает строку в нижнем регистре. Затем создаются два объекта s1 и s2 класса LowerString, содержащие разные строки.

При выполнении операции сравнения s1 == s2 ожидается, что результат будет True, так как оба объекта содержат одинаковую строку в нижнем регистре. Однако, в данном случае результатом будет False.

Это происходит потому, что операция сравнения == вызывает метод __eq__() для сравнения объектов. В классе LowerString не определен метод __eq__(), поэтому используется метод __eq__() из родительского класса str. Встроенный метод __eq__() сравнивает строки без учета регистра, поэтому строки 'BEEGEEK' и 'BeeGeek' считаются равными.

Чтобы исправить это, необходимо переопределить метод __eq__() в классе LowerString, чтобы он учитывал регистр строк. Вот исправленный код: class LowerString(str):
def __str__(self):
return self.lower()

def __eq__(self, other):
return str(self) == str(other)

s1 = LowerString('BEEGEEK')
s2 = LowerString('BeeGeek')
print(s1 == s2) # Выводит True Теперь результатом сравнения s1 == s2 будет True, так как строки будут сравниваться с учетом регистра.
 
Регистрация
10 Окт 2013
Сообщения
94
Репутация
0
Спасибо
0
Монет
0
потому что ты тупой
 
Регистрация
7 Сен 2013
Сообщения
65
Репутация
2
Спасибо
0
Монет
0
Потому, что при выполнении операции сравнения __str__ НЕ вызывается.

Вот если ты напишешь print(str(s1) == str(s2)), тогда получишь нужный результат: str() вызовет магический метод __str__ и возвращаемая str() строка будет преобразована к нижнему регистру.
 
Сверху Снизу