Python 모듈 글로벌 대 __init__ globals
문제
사과, 다소 혼란스러운 파이썬 초보자 질문. 모듈이 호출되었다고 가정 해 봅시다 animals.py
.......
globvar = 1
class dog:
def bark(self):
print globvar
class cat:
def miaow(self):
print globvar
이것과 이것의 차이점은 무엇입니까?
class dog:
def __init__(self):
global globvar
def bark(self):
print globvar
class cat:
def miaow(self):
print globvar
내가 항상 개를 먼저 인스턴스화한다고 가정합니까?
내 질문은 차이가 있습니까? 두 번째 예에서는 다음을 시작합니다 dog
모듈 레벨을 만듭니다 globvar
첫 번째 예에서와 마찬가지로, 그것은 동일하게 행동하고 같은 범위를 가질 것입니까?
해결책
global
새 변수를 생성하지 않고이 이름은 로컬 변수 대신 전역 변수를 참조해야한다고 말합니다. 일반적으로 함수/클래스/... 변수에 대한 할당은 로컬 변수를 참조하십시오. 예를 들어 다음과 같은 기능을 수행하십시오.
def increment(n)
# this creates a new local m
m = n+1
return m
여기에 새로운 로컬 변수가 있습니다 m
글로벌 변수가 있더라도 생성됩니다. m
이미 존재합니다. 일부 기능 호출은 주변 범위에서 예기치 않게 변수를 수정해서는 안되므로 일반적으로 원하는 것입니다. 실제로 글로벌 변수를 수정하고 새로운 로컬 변수를 만들지 않으려면 global
예어:
def increment(n)
global increment_calls
increment_calls += 1
return n+1
당신의 경우 global
생성자에서 변수를 생성하지 않으며 추가 액세스 시도 globvar
불합격:
>>> import animals
>>> d = animals.dog()
>>> d.bark()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "animals.py", line 7, in bark
print globvar
NameError: global name 'globvar' is not defined
그러나 실제로 값을 할당한다면 globvar
생성자에서 개를 만들 때 모듈-글로벌 변수가 생성됩니다.
class dog:
def __init__(self):
global globvar
globvar = 1
...
실행:
>>> import animals
>>> d = animals.dog()
>>> d.bark()
1
>>> print animals.globvar
1
다른 팁
아니요 global
진술은 당신이 할 때만 중요합니다 할당 메소드 또는 함수 내의 글로벌 변수로. 하도록 하다 __init__
관련이 없습니다 ~ 아니다 글로벌을 만들지 않기 때문에 글로벌을 만듭니다.
제휴하지 않습니다 StackOverflow