- Прежде всего, методы dunder (двойное подчеркивание: '__') - это специальные методы, используемые вами или python для подключения к вашему коду, например, реализация
__len__
в классе позволит вам запуститьlen(MyClass)
вместо MyClass.__len__()
.в сущности, ваше определение __str__
не является вашим желаемым шагом.
- Во-вторых, в вашем
__str__
методе вы пытаетесь сравнить w1 == w2
, то есть две переменные, которых у вас нетопределены или приняты в качестве аргументов вашей функции.
Мой ответ таков: не всегда вам нужно использовать ООП, например, ваш случай может быть определен как простая функция следующим образом
edit
Как я вижу, я случайно перепутал анаграмму с палиндромом , я также добавляю версию анаграммы.
def is_anagram(w1, w2):
return sorted(w1.lower()) == sorted(w2.lower())
# and I am keeping just for reference sake the palindrome one.
def is_palindrome(w1, w2):
return w1.lower() == w2.lower()[::-1]
То, что я делаю в функции анаграммы - это первое, я пишу слова в нижнем регистре, чтобы я мог сравнивать символы независимо от регистра, а затем я использую функцию sorted
, которая принимает последовательность (которая str
является последовательностью) и сортирует ее), а затем мы сравниваем 2, чтобы увидеть, действительно ли они являются анаграммами друг друга.
То, что я делаю в функции палиндром, принимаетстроки, а затем сравнивая версию в нижнем регистреn от w1
до уважаемой строчной версии w2
, я переворачиваю строку, используя срез, который начинается с индекса по умолчанию (неявный, поскольку он пуст до первого двоеточия), остановка по умолчанию и шаг отрицания1, что в действительности переворачивает строку.
В любом случае, я желаю вам большой удачи в вашем программировании!