저는 파이썬 범위 규칙을 이해하려고합니다. 나는 동일한 모듈 그것은 NameError
실패클래스의 private 모듈 변수에 액세스합니다.
bar = "bar"
_bar = "underscore"
__bar = "double underscore"
def foo():
print bar
print _bar
print globals()["__bar"]
print __bar
class Foo:
def __init__(self):
print bar
print _bar
print globals()["__bar"]
print __bar #NameError: global name '_Foo__bar' is not defined
foo()
Foo()
에서 클래스 액세스 "매우 개인"변수를하려고이 작업을 수행합니다. 나는 그것에 대해 아무것도 찾을 수 없습니다. 왜 실패하고 왜이 행동이 묘사 되었습니까?
전체 출력을 게시 할 수 있습니까? 또는 완전한 예외 메시지? –
그래, 삭제 된 이유는 - 놀랍게도 이것은 독립 실행 형 이름 인'__bar'에서도 발생하기 때문입니다. 당신이 문서에서 올린 인용문은 그 사실을 명백하게 진술하지 않습니다. –
@DanielRoseman : * 클래스 정의에서 텍스트로 발생하는 식별자 * 및 *이 변환은 식별자가 사용 된 구문 적 컨텍스트와 독립적입니다. * 메서드 정의를 포함하여 클래스 본문의 모든 식별자가 포함됩니다 . 속성, 전역 또는 로컬인지 여부는 중요하지 않습니다. –