2012-04-09 4 views
8

는 그래서 같은 클래스 내에서 전역 변수를 선언하기 위해 노력하고있어 : 나는 클래스 외부에서 접근 할 필요가클래스 내에서 전역 변수를 선언하는 방법은 무엇입니까?

class myclass: 
    global myvar = 'something' 

을,하지만 난 클래스 파일 외부에서 선언해야하고 싶지 않아 . 내 질문은 이것이 가능한가? 그렇다면 구문은 무엇입니까?

+0

왜 이런 식으로 일을하지 같이 할 수 있습니까? – hjpotter92

+1

당신이 묻는 것보다 다른 무엇인가를 원했던 것처럼 보입니다 – 0xc0de

+0

FJ가 질문 한대로 질문에 대답하여 zigg에 의도를 알 렸습니다 (myclass.var를 반복해서 입력하지 않아도 됨). 그러면 더 나은 연습이 될 것입니다. 나는 미래의 사람들을 검색에서 그의 대답에 도착하는 같은 질문으로 지적 할 것이다. – Adam

답변

12

, 당신은 "주 파일 이외의"지정합니다. 클래스를 가정, 그리고

myvar = 'something' 

class myclass: 
    pass 

당신이 할 수있는 변수 정의는 mymodule라는 모듈에 있습니다 : 당신이 무슨 뜻하지 않은 경우 "클래스 밖에서", 다음이 모듈 수준 변수를 정의하기 위해 노력할 것

import mymodule 

myinstance = myclass() 
print mymodule.myvar 

또한, @ phihag의 대답에 귀하의 코멘트에 대한 응답으로, 당신은 규정과 같이 myVar에 액세스 할 수 있습니다

from mymodule import myvar 

print myvar 

을 그냥 anoth에서 속기에 액세스하려면 어 파일은 여전히 ​​클래스를 정의하는 동안 :

class myclass: 
    myvar = 'something' 

을 한 후, 파일에 당신이 액세스 로컬 네임 스페이스에 대한 참조 할당해야합니다 여기서

myvar = myclass.myvar 

print myvar 
+0

죄송합니다. 나는 수업 외의 의미였습니다. 클래스를 호출하는 파일. – Adam

+0

편집을 참조하십시오. 자신이 필요로하는 것만 가져 오는 네임 스페이스에 대한 통제력을 유지하는 것이 가장 좋습니다. 그렇지 않으면, 당신은 당신의 프로그램이 커질수록 당신이 의도하지 않은 것을 참조하게 될 수도 있습니다 ... – zigg

3

당신은 단순히 클래스에 속성을 할당 할 수 있습니다 귀하의 질문에

class myclass(object): 
    myvar = 'something' 

# alternatively 
myclass.myvar = 'else' 

# somewhere else ... 
print(myclass.myvar) 
+0

나는이 작품을 이해, 내 질문은 "myclass"를 입력하지 않아도되는 전역 변수를 설정하는 것이 가능합니다. 많이. 가능한가? 감사. – Adam

+2

@fryy 이론 상으로는 가능하지만, 아주 나쁜 아이디어와 이유는 ** 그것을 정당화하지 않습니다. 이것이 올바른 방법입니다. – delnan

+2

@fryy 일반적으로 파이썬에서 "global"문을 사용하는 것은 나쁜 디자인을 나타냅니다 (항상 그런 것은 아니기 때문에 그렇습니다). 종종 다른 언어에서 온 사람들은 이것을 이전 언어에서 익숙한 것과 유사한 것으로 간주합니다. –

3

당신은 정말 여부를 재고해야한다을 이것은 실제로 필요하지 않습니다. 이것은 프로그램을 구조화하는 이상한 방법처럼 보입니다. 그리고 더 정확한 phihag의 방법을 사용해야합니다.

>>> class myclass(object): 
...  global myvar 
...  myvar = 'something' 
... 
>>> myvar 
'something' 
+0

고맙습니다. "from mymodule import myvar"를 사용하겠습니다. 질문에 답변 해 주셔서 감사합니다. – Adam

3

귀하의 질문에 그것을 할 것입니다

global s 
s = 5 

에 대답하기 : 당신은 여전히이 작업을 수행 할 수 결정하면

, 여기에 당신이 할 수있는 방법이다. 당신은 당신의 수업에서 당신이 이것을하는 곳에 따라 문제를 겪을 것입니다. 기능에서 벗어나 원하는 동작을 얻으십시오. `및 다음 줄에, 변경,`글로벌 myVar에를 :

3

당신은

# I don't like this hackish way :-S 
# Want to declare hackish_global_var = 'something' as global 
global_var = globals() 
global_var['hackish_global_var'] = 'something' 
관련 문제