Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 9, 2013 14:19:02

wmnpyafn
Зарегистрирован: 2013-06-09
Сообщения: 26
Репутация: +  1  -
Профиль   Отправить e-mail  

Сделать переменную атрибутом модуля

Извините если выражаюсь не правильно, я новичок.
На сколько я знаю, я могу получить доступ только к переменным которые не вложены в функции или классы(то есть находятся на верхнем уровне).
У меня ситуация такая, что есть модуль, в котором описан класс и в одном из методов класса есть переменная к которой мне нужно достучаться из другого модуля. Как мне это можно сделать?

Офлайн

#2 Июнь 9, 2013 15:14:25

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Сделать переменную атрибутом модуля

wmnpyafn
в одном из методов класса есть переменная
Откуда она там взялась? Почему бы не получать доступ к значению этой переменной естественным путем?

Офлайн

#3 Июнь 9, 2013 15:18:33

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  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



Отредактировано bw (Июнь 9, 2013 15:19:31)

Офлайн

#4 Июнь 9, 2013 22:05:33

wmnpyafn
Зарегистрирован: 2013-06-09
Сообщения: 26
Репутация: +  1  -
Профиль   Отправить e-mail  

Сделать переменную атрибутом модуля

Есть класс, в нём выполняется построение окна для авторизации и сама логика авторизации. В другом модуле нужно получить логин под которым зашёл пользователь

Офлайн

#5 Июнь 9, 2013 22:49:33

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  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'

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

..bw



Офлайн

#6 Июнь 10, 2013 19:48:10

wmnpyafn
Зарегистрирован: 2013-06-09
Сообщения: 26
Репутация: +  1  -
Профиль   Отправить e-mail  

Сделать переменную атрибутом модуля

Проблема в том, что переменная не является атрибутом класса. Она в функции находится.

Офлайн

#7 Июнь 10, 2013 22:57:40

wmnpyafn
Зарегистрирован: 2013-06-09
Сообщения: 26
Репутация: +  1  -
Профиль   Отправить e-mail  

Сделать переменную атрибутом модуля

В общем пришёл к выводу, что нужно рефракторить код, тему можно считать закрытой.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version