2015-10-14 4 views
-4

Есть ли способ предоставить классам доступ к глобальным переменным в python, не передавая его в качестве параметра? Ниже приводится то, что я хочу сделать:Доступ класса к глобальным переменным в Python

# Global 
data = [] 

# Class 
Foo: 
    def __init__(self): 
     self.name = data[0] 

# Main 
data = ["name", "name2"] 
f = Foo() 
+2

Возможный дубликат [Как получить доступ к глобальной переменной внутри класса на Python] (http://stackoverflow.com/questions/10814452/how-can-i-access-global-variable-inside-class-in-python) – Riftus

+0

Он будет работать, если вы исправите его, чтобы использовать действительный синтаксис. – BrenBarn

+0

Riftus на самом деле не дубликат; в этом случае пользователь создает новую переменную с тем же именем; здесь, как отмечает BrenBarn, это отлично работает, если вы правильно выполняете класс Foo: и def __init__ ... однако все же голосуете, чтобы закрыть, поскольку это опечатка – Foon

ответ

0

Я только что напечатали, что псевдокод действительно быстро, поэтому там была ошибка опр. Моя проблема заключалась в том, что я не объявлял данные как глобальные внутри функции.

0

Что вы делаете, это работает.

#!/usr/bin/python 
data = [] 
class Foo(object): 
    def __init__(self): 
    self.attr = data[0] 
data = [1,2,3] 
print Foo().attr 
data = [6] 
print Foo().attr 

Выведет

1 
6 
+0

'def execute (self): \t \t l = re.split (' , ', self.iList.execute()) \t \t печати л \t \t для г в л: \t \t \t х = inTable (я, idTable) \t \t \t если х> = 0: \t \t \t \t self.iList.setId (int (inData [0])) \t \t \t = входные данные, входные данные, [1:] \t \t \t еще: \t \t \t \t печать 'переменные% S не объявлено. % I \t \t \t \t exit() ' Я делаю это, но всегда получаю UnboundLocalError: локальная переменная 'inData', на которую ссылаются перед назначением. Я распечатываю список до того, как я вызову класс, поэтому я знаю, что он заполнен, и я убедился, что имя переменной верное. Есть идеи? – Aginor

+0

@JoshuaLaney, как только вы назначаете переменную в * любой * точке в области видимости, * все ссылки на нее будут рассматриваться как локальные. Это включает в себя ссылки * ранее * на назначение. Вы должны явно объявить переменную ** global ** в таком случае. – MisterMiyagi

+0

Спасибо. Это решение, которое я в итоге нашел – Aginor

Смежные вопросы