Python 3 소스 코드에서 범위 분석을 일부 수행하려고하고 있으며 클래스 정의 내에서 비 로컬 명령문이 작동하는 방식에 문제가 있습니다.클래스 정의에있는 Python 비 지역 문
클래스 정의는 본문을 새 네임 스페이스 (dict이라고 부름) 내부에서 실행하고 클래스 이름을 유형 (name, bases, dict)의 결과에 바인딩합니다. 로컬이 아닌 x는 해당 로컬이 아닌 범위에서 어딘가에 바인딩되는 변수를 참조하는 한 작동해야합니다. 다음 코드는
def A():
v = 1
class B:
nonlocal v
v = 2
사람이 설명 할 수
완벽하게 실행되는 동안class A:
v = 1
class B:
nonlocal v
v = 2
을하지만이
SyntaxError: no binding for nonlocal 'v' found
와 함께 실패
이에서 나는 컴파일하고 실행하려면 다음 코드를 기대 함수 정의의 종결과 클래스 정의의 차이점은 무엇입니까?
더 많은 연구 - 마지막 코드 샘플에서 A의 locals()는 {v : 1}이고 B 내부는 {v : 1}입니다. 2, ''__module__'': ''__main__'', ''__locals__' : {...}} – Andyrooger