Найти - Пользователи
Полная версия: Сделать переменную атрибутом модуля
Начало » Python для новичков » Сделать переменную атрибутом модуля
1
wmnpyafn
Извините если выражаюсь не правильно, я новичок.
На сколько я знаю, я могу получить доступ только к переменным которые не вложены в функции или классы(то есть находятся на верхнем уровне).
У меня ситуация такая, что есть модуль, в котором описан класс и в одном из методов класса есть переменная к которой мне нужно достучаться из другого модуля. Как мне это можно сделать?
Shaman
wmnpyafn
в одном из методов класса есть переменная
Откуда она там взялась? Почему бы не получать доступ к значению этой переменной естественным путем?
bw
Рефакторингом приложения, так что бы в этом не возникало больше необходимости. Локальные переменные стековые, при выполнении функции создаётся фрейм, в нём создаются переменные, после завершения функции фрейм как все созданные в нём переменные (точнее ссылки на объекты) освобождается.

Сформулируй исходную задачу. Скорее всего вы хотите чего-то другого. Меняйте дизайн приложения. Читайте теорию по ОО и процедурного программирования, что-ли, может там будет ответ на ваш вопрос.

Как вариант, но лучше всё же ещё раз подумать:
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
wmnpyafn
Есть класс, в нём выполняется построение окна для авторизации и сама логика авторизации. В другом модуле нужно получить логин под которым зашёл пользователь
bw
И почему нельзя эти данные оставить в атрибутах экземпляра класса?

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'

Как на самом деле должно быть, конечно зависит от используемого ui-фреймворка.

..bw
wmnpyafn
Проблема в том, что переменная не является атрибутом класса. Она в функции находится.
wmnpyafn
В общем пришёл к выводу, что нужно рефракторить код, тему можно считать закрытой.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB