Ошибка атрибута: объект ‘RegexpReplacer’ не имеет атрибута ‘replace’

#python #python-3.x #attributeerror

#питон #python-3.x #ошибка атрибута #python

Вопрос:

при определении класса (RegexpReplacer) я обнаружил ошибку атрибута и не получил решения этой проблемы. код приведен ниже, а также ошибка:

 import re
replacement_patterns = [
(r'won't', 'will not'),
(r'can't', 'cannot'),
(r'i'm', 'i am'),
(r'ain't', 'is not'),
(r'(w )'ll', 'g<1> will'),
(r'(w )n't', 'g<1> not'),
(r'(w )'ve', 'g<1> have'),
(r'(w )'s', 'g<1> is'),
(r'(w )'re', 'g<1> are'),
(r'(w )'d', 'g<1> would')
]
class RegexpReplacer(object):
    def __init__(self, patterns=replacement_patterns):
        self.patterns = [(re.compile(regex), repl) for (regex, repl) in patterns]
        def replace(self, text):
                         s = text
                         for (pattern, repl) in self.patterns:
                             s = re.sub(pattern, repl, s)
                             return s
replacer=RegexpReplacer()
print(replacer.replace("can't is a contradicton"))
  

я нашел ошибку

 Traceback (most recent call last):
 print(replacer.replace("can't is a contradicton"))
AttributeError: 'RegexpReplacer' object has no attribute 'replace'
  

пожалуйста, если кто-нибудь может помочь

Ответ №1:

replace Метод скрыт внутри __init__ , вы должны исправить отступ:

 import re
replacement_patterns = [
(r'won't', 'will not'),
(r'can't', 'cannot'),
(r'i'm', 'i am'),
(r'ain't', 'is not'),
(r'(w )'ll', 'g<1> will'),
(r'(w )n't', 'g<1> not'),
(r'(w )'ve', 'g<1> have'),
(r'(w )'s', 'g<1> is'),
(r'(w )'re', 'g<1> are'),
(r'(w )'d', 'g<1> would')
]
class RegexpReplacer(object):
    def __init__(self, patterns=replacement_patterns):
        self.patterns = [(re.compile(regex), repl) for (regex, repl) in patterns]
    def replace(self, text):
         s = text
         for (pattern, repl) in self.patterns:
             s = re.sub(pattern, repl, s)
         return s
replacer=RegexpReplacer()
print(replacer.replace("can't is a contradicton"))