> 백엔드 개발 > 파이썬 튜토리얼 > Python 3 목록 이해가 클래스 변수에 직접 액세스할 수 없는 이유는 무엇입니까?

Python 3 목록 이해가 클래스 변수에 직접 액세스할 수 없는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-23 22:51:10
원래의
850명이 탐색했습니다.

Why Can't Python 3 List Comprehensions Directly Access Class Variables?

리스트 컴프리헨션에서 클래스 변수에 액세스

Python 3에서 리스트 컴프리헨션은 자체 중첩 범위 내에서 작동하므로 클래스 정의 내에 정의된 클래스 변수에 직접 액세스할 수 없습니다. 이 동작은 이러한 액세스가 가능했던 Python 2와 다릅니다.

오류 예

다음 코드는 Python 3의 문제를 보여줍니다.

class Foo:
    x = 5
    y = [x for i in range(1)]
로그인 후 복사

이 코드는 목록 이해가 클래스 변수에 액세스할 수 없기 때문에 x에 대한 NameError.

클래스 범위 및 List/Set/Dict 컴프리헨션

목록, 집합 및 사전 컴프리헨션과 생성기 표현식은 클래스 범위에서 상속되지 않는 중첩 범위에서 작동합니다. 이는 이러한 컴프리헨션이 함수로 구현되고 별도의 범위에서 실행되기 때문입니다.

해결 방법

제한에도 불구하고 컴프리헨션에서 클래스 변수에 액세스하는 해결 방법이 있습니다.

1 . 명시적 범위

컴프리헨션에 필요한 변수를 보유하기 위해 클래스 정의 내에 특정 범위를 만듭니다.

class Foo:
    x = 5
    def __init__(self):
        y = [self.x for i in range(1)]
로그인 후 복사

2. 인스턴스 변수

대신 생성자에서 인스턴스 변수를 초기화하여 인스턴스 변수를 사용하세요.

class Foo:
    def __init__(self):
        self.x = 5
        self.y = [self.x for i in range(1)]
로그인 후 복사

3. 전역 범위

가능하다면 변수와 논리를 클래스 정의 외부로 이동하고 전역 범위를 사용하세요.

x = 5

class Foo:
    y = [x for i in range(1)]
로그인 후 복사

예외: 가장 바깥쪽 Iterable

클래스 변수에 직접 액세스하는 동안 이해력으로는 불가능합니다. 가장 바깥쪽 반복 가능 항목에 대한 예외가 있습니다. 가장 바깥쪽 iterable을 결정하는 표현식은 클래스 변수에 액세스할 수 있습니다:

class Foo:
    x = 5
    y = [i for i in range(x)]
로그인 후 복사

위 내용은 Python 3 목록 이해가 클래스 변수에 직접 액세스할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿