Почему функция не работает в классе? Почему это работает:def clean(text: str): return text \ .replace('?', '') \ .replace("|", '') \ .replace('\"', '') \ .replace(' ', '') \ .replace(':', '') \ .replace('\\', '') \ .replace('/', '') \ .replace('>', '') \ .replace('<', '') \ .replace('"', '') \ .replace('+', '') \ .replace('*', '') \ .replace(' .', '') ... class ParseText: ... def save_text(self): part = open('src/text/{}.txt'.format(clean(partName)), 'w', encoding="utf-8") А это не работает:def clean(text: str): strings = ['?', "|", '\"', ] result = (text.replace(i, "") for i in strings) result = str() for i in strings: print(i) result = text.replace(i, '') continue return result ... class ParseText: ... def save_text(self): part = open('src/text/{}.txt'.format(clean(partName)), 'w', encoding="utf-8")
Функция не работает в классе потому, что при вызове метода format в строке 'src/text/{}.txt'.format(clean(partName)), передается аргумент clean(partName), который в данном случае обращается к функции clean, определенной вне класса ParseText. Во втором случае, когда функция clean определена внутри класса ParseText, вызов метода format будет искать функцию clean в рамках этого класса, что приводит к ошибке.
Чтобы исправить ситуацию, можно передавать аргумент функции clean явно, например:
def clean(text: str): strings = ['?', "|", '\"', ] result = text for i in strings: result = result.replace(i, '') return result class ParseText: ... def save_text(self): part = open('src/text/{}.txt'.format(clean(partName)), 'w', encoding="utf-8")
Таким образом функция clean будет вызываться с переданным в нее аргументом, вне зависимости от того, где она была определена.
Функция не работает в классе потому, что при вызове метода format в строке 'src/text/{}.txt'.format(clean(partName)), передается аргумент clean(partName), который в данном случае обращается к функции clean, определенной вне класса ParseText. Во втором случае, когда функция clean определена внутри класса ParseText, вызов метода format будет искать функцию clean в рамках этого класса, что приводит к ошибке.
Чтобы исправить ситуацию, можно передавать аргумент функции clean явно, например:
def clean(text: str):strings = ['?', "|", '\"', ]
result = text
for i in strings:
result = result.replace(i, '')
return result
class ParseText:
...
def save_text(self):
part = open('src/text/{}.txt'.format(clean(partName)), 'w', encoding="utf-8")
Таким образом функция clean будет вызываться с переданным в нее аргументом, вне зависимости от того, где она была определена.