Форум сайта python.su
1
Извините если выражаюсь не правильно, я новичок.
На сколько я знаю, я могу получить доступ только к переменным которые не вложены в функции или классы(то есть находятся на верхнем уровне).
У меня ситуация такая, что есть модуль, в котором описан класс и в одном из методов класса есть переменная к которой мне нужно достучаться из другого модуля. Как мне это можно сделать?
Офлайн
88
wmnpyafnОткуда она там взялась? Почему бы не получать доступ к значению этой переменной естественным путем?
в одном из методов класса есть переменная
Офлайн
20
Рефакторингом приложения, так что бы в этом не возникало больше необходимости. Локальные переменные стековые, при выполнении функции создаётся фрейм, в нём создаются переменные, после завершения функции фрейм как все созданные в нём переменные (точнее ссылки на объекты) освобождается.
Сформулируй исходную задачу. Скорее всего вы хотите чего-то другого. Меняйте дизайн приложения. Читайте теорию по ОО и процедурного программирования, что-ли, может там будет ответ на ваш вопрос.
Как вариант, но лучше всё же ещё раз подумать:
class Foo(object): def __init__(self): self.bar = Bar() class Bar(object): baz = None def __call__(self) self.baz = 'baz' foo = Foo() assert foo.bar.baz is None foo.bar() assert foo.bar.baz == 'baz'
Отредактировано bw (Июнь 9, 2013 15:19:31)
Офлайн
1
Есть класс, в нём выполняется построение окна для авторизации и сама логика авторизации. В другом модуле нужно получить логин под которым зашёл пользователь
Офлайн
20
И почему нельзя эти данные оставить в атрибутах экземпляра класса?
class Window(object): login = None def do_login(self, login, passwd): # ... self.login = login window = Window() assert window.login is None window.do_login('user', 'password') assert window.login == 'user'
Офлайн
1
Проблема в том, что переменная не является атрибутом класса. Она в функции находится.
Офлайн
1
В общем пришёл к выводу, что нужно рефракторить код, тему можно считать закрытой.
Офлайн