Я пытаюсь написать объект класса в python, который имеет атрибуты, которые являются функциями закрытия, способными модифицировать приватную строку, я понимаю, что закрытие по большей части, но я не могу заставить его работать с более чем один. Я пытаюсь вернуть массив функции, но я получаюЗакрытие с несколькими методами в python
local variable 'string' referenced before assignment
указывая мне, что либо переменная строка уничтожаются или функция, не сохраняя свой статус закрытия и возможность доступа к нему. Кажется, что функция get_val работает, и я попытался добавить глобальные объявления, но это не проблема, или я не мог заставить ее работать правильно.
class StringUpdater:
def _(self):
string = "MI"
def get_val():
return string
def add_u():
if string.endswith("I"):
string+="U"
def add_two_through_last():
string+=string[1:]
def replace_III_with_U():
#global string
string.replace("III", "U")
def remove_UU():
#global string
string.replace("UU", "")
return [get_val,add_u,add_two_through_last,replace_III_with_U,remove_UU]
def __init__(self):
str_obj = self._()
self.get_val = str_obj[0]
self.add_u = str_obj[1]
self.add_two_through_last = str_obj[2]
self.replace_III_with_U = str_obj[3]
self.remove_UU = str_obj[4]
f = StringUpdater()
print f.add_two_through_last()
print f.get_val()
Вы считаете правильным закрыть. ваш код обычно должен работать на языках fp. эта раздражающая проблема вводится с помощью python legb scoping. – HuStmpHrrr
см. Http://embrangler.com/2011/01/python-scoping-understading-legb/. точно такая же проблема. – HuStmpHrrr
спасибо за статью, но я не думаю, что его решение работает для моей проблемы, его все еще не удается изменить исходную переменную – FFF