Python 2에서는 클래스 정의 내의 List Comprehension에서 클래스 변수에 액세스하는 것이 가능했습니다. 그러나 Python 3 이상에서는 범위 제한으로 인해 이것이 허용되지 않습니다. 클래스 범위는 컴프리헨션 및 기타 함수의 범위와 별도로 처리되므로 이름을 사용하여 컴프리헨션 내에서 클래스 변수에 액세스하는 것은 허용되지 않습니다.
예를 들어 Python 2의 다음 코드는 작동합니다. :
그러나 Python 3에서는 다음과 같은 결과가 발생합니다. 오류:
이 제한의 이유는 Python이 범위를 처리하는 방식 때문입니다. 클래스 정의 내에서 목록 이해를 평가할 때 Python은 해당 이해에 대한 새로운 범위를 만듭니다. 이 새로운 범위에는 클래스 범위가 포함되지 않으므로 클래스 범위에 정의된 모든 변수는 컴프리헨션 내에서 표시되지 않습니다.
컴프리헨션, 생성기 표현식 및 람다 함수는 모두 자체적으로 격리된 범위를 갖습니다. 바깥쪽 함수나 클래스 범위의 변수에 직접 액세스합니다. 이는 바깥쪽 범위에 있는 변수의 의도하지 않은 수정을 방지하는 보안 조치입니다.
이 제한 사항에 대한 몇 가지 해결 방법이 있습니다.
이러한 해결 방법을 사용하면 컴프리헨션에서 클래스 변수에 액세스할 수 있지만 코드가 더욱 복잡해집니다. 특정 요구 사항에 가장 적합한 접근 방식을 신중하게 고려하세요.
위 내용은 Python 3의 List Comprehension에서 직접 클래스 변수에 액세스할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!