Форум сайта python.su
Привет.
Вот подскажите, плиз, как бы так исхитриться:
В объявлении класса есть метод. Для оптимизации в методе объявляется функция, которая должна кое-что изменить, возвратить и всё такое.
Однако, эта функция изменяет довольно много разных данных вне функции, а вызывается она в цикле. Плюс, после цикла есть дополнительная обработка значений, которые функция меняет. Слишком много значений, которые функция возвращает, довольно трудно передать и вернуть, а так же объявлять глобальными.
И вот вопрос: может, есть какой-то способ все эти локальные для метода переменные изменить в функции и при этом чтобы они изменились для метода?
Я думал, может какой-нибудь global locals() сделать или типа того, но башку взорвал, пока это пытался набыдлокодить :(
Офлайн
В 3-ем Python, кажется, для этого есть костыль
nonlocal var1, var2, …
А так выход только в использовании изменяемых объектов, то есть вместо переменных использовать список или словарь, типа
variables = {'x': 1, ‘y’: 5}
variables, variables
Можно и класс использовать.
Хотя в цикле искать атрибуты в __dict__ класса будет накладно.
Впрочем есть такой вариант:
class foo(object):
def methode(self):
temp = type('storage', (object,), {'__slots__': ('x', 'y')})()
def bar():
temp.x = 2
temp.y = 5
bar()
print temp.x, temp.y
foo().methode()
Офлайн
Virtuos86Ну я пользую 2.6-2.7 =)
В 3-ем Python, кажется, для этого есть костыль
nonlocal var1, var2, …
Virtuos86О, вот это клёвая штука! Огромное спасибо за совет!!
За счёт использования слотов у инстанса temp не будет __dict__, и следовательно не будет и поиска атрибутов по нему. Только слоты нужно сразу указать.
Офлайн