문제

사과, 다소 혼란스러운 파이썬 초보자 질문. 모듈이 호출되었다고 가정 해 봅시다 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__ 관련이 없습니다 ~ 아니다 글로벌을 만들지 않기 때문에 글로벌을 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top