는 그래서 같은 클래스 내에서 전역 변수를 선언하기 위해 노력하고있어 : 나는 클래스 외부에서 접근 할 필요가클래스 내에서 전역 변수를 선언하는 방법은 무엇입니까?
class myclass:
global myvar = 'something'
을,하지만 난 클래스 파일 외부에서 선언해야하고 싶지 않아 . 내 질문은 이것이 가능한가? 그렇다면 구문은 무엇입니까?
는 그래서 같은 클래스 내에서 전역 변수를 선언하기 위해 노력하고있어 : 나는 클래스 외부에서 접근 할 필요가클래스 내에서 전역 변수를 선언하는 방법은 무엇입니까?
class myclass:
global myvar = 'something'
을,하지만 난 클래스 파일 외부에서 선언해야하고 싶지 않아 . 내 질문은 이것이 가능한가? 그렇다면 구문은 무엇입니까?
, 당신은 "주 파일 이외의"지정합니다. 클래스를 가정, 그리고
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
당신은 단순히 클래스에 속성을 할당 할 수 있습니다 귀하의 질문에
class myclass(object):
myvar = 'something'
# alternatively
myclass.myvar = 'else'
# somewhere else ...
print(myclass.myvar)
나는이 작품을 이해, 내 질문은 "myclass"를 입력하지 않아도되는 전역 변수를 설정하는 것이 가능합니다. 많이. 가능한가? 감사. – Adam
@fryy 이론 상으로는 가능하지만, 아주 나쁜 아이디어와 이유는 ** 그것을 정당화하지 않습니다. 이것이 올바른 방법입니다. – delnan
@fryy 일반적으로 파이썬에서 "global"문을 사용하는 것은 나쁜 디자인을 나타냅니다 (항상 그런 것은 아니기 때문에 그렇습니다). 종종 다른 언어에서 온 사람들은 이것을 이전 언어에서 익숙한 것과 유사한 것으로 간주합니다. –
당신은 정말 여부를 재고해야한다을 이것은 실제로 필요하지 않습니다. 이것은 프로그램을 구조화하는 이상한 방법처럼 보입니다. 그리고 더 정확한 phihag의 방법을 사용해야합니다.
>>> class myclass(object):
... global myvar
... myvar = 'something'
...
>>> myvar
'something'
고맙습니다. "from mymodule import myvar"를 사용하겠습니다. 질문에 답변 해 주셔서 감사합니다. – Adam
귀하의 질문에 그것을 할 것입니다
global s
s = 5
에 대답하기 : 당신은 여전히이 작업을 수행 할 수 결정하면
, 여기에 당신이 할 수있는 방법이다. 당신은 당신의 수업에서 당신이 이것을하는 곳에 따라 문제를 겪을 것입니다. 기능에서 벗어나 원하는 동작을 얻으십시오. `및 다음 줄에, 변경,`글로벌 myVar에를 :
당신은
# 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'
왜 이런 식으로 일을하지 같이 할 수 있습니까? – hjpotter92
당신이 묻는 것보다 다른 무엇인가를 원했던 것처럼 보입니다 – 0xc0de
FJ가 질문 한대로 질문에 대답하여 zigg에 의도를 알 렸습니다 (myclass.var를 반복해서 입력하지 않아도 됨). 그러면 더 나은 연습이 될 것입니다. 나는 미래의 사람들을 검색에서 그의 대답에 도착하는 같은 질문으로 지적 할 것이다. – Adam