클래스 변수는 함수 정의 내의 리스트 컴프리헨션에서 액세스할 수 있지만 클래스 정의 내의 리스트 컴프리헨션에서는 액세스할 수 없습니다. . 이러한 불일치는 클래스 범위가 리스트 컴프리헨션이나 생성기 표현식이나 함수 정의와 같은 기타 포함된 범위로 확장되지 않는다는 사실에서 비롯됩니다.
대신 리스트 컴프리헨션 및 기타 그러한 표현식에는 자체 로컬 범위가 있어 클래스 범위에 액세스할 수 없습니다. 바깥쪽 클래스 범위에 정의된 변수. 이 동작은 Python의 모든 버전에서 일관됩니다.
클래스 정의 내의 목록 이해에 있는 클래스 변수에 액세스하려면 다음 해결 방법 중 하나를 사용할 수 있습니다.
다음 예를 고려하십시오.
class Foo: x = 5 # Error in Python 3: 'NameError: name 'x' is not defined' y = [x for i in range(1)]
이 예에서 클래스 변수 x를 사용하려면 , 다음 해결 방법 중 하나를 사용할 수 있습니다.
명시적 사용 함수:
def get_y(x): return [x for i in range(1)] y = get_y(x)
__init__을 사용하여 인스턴스 변수 만들기:
def __init__(self): self.y = [self.x for i in range(1)]
앞서 언급한 해결 방법에도 불구하고, 일반적으로 클래스 정의 내의 목록 이해에서 클래스 변수에 액세스하지 않는 것이 좋습니다. 이러한 관행은 특히 다른 개발자와 공동 작업할 때 혼란과 잠재적인 오류를 초래할 수 있습니다.
더 깔끔하고 유지 관리하기 쉬운 접근 방식을 위해서는 클래스 정의 내의 클래스 변수에 액세스할 때 목록 이해 대신 함수나 인스턴스 변수를 사용하는 것이 좋습니다.
위 내용은 Python의 클래스 정의 내 목록 이해에서 클래스 변수에 직접 액세스할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!