Development Tip

Python 'self'키워드

yourdevel 2020. 12. 13. 11:17
반응형

Python 'self'키워드


저는 Python을 처음 접했고 (일반적으로 C #에서 작업) 지난 며칠 동안 사용하기 시작했습니다.

클래스 내에서 해당 클래스 데이터 멤버 및 메서드에 대한 호출을 접두사로 지정해야합니까? 내가 메서드를 호출하거나 클래스 내에서, 그 클래스의 값을 취득하고 경우에 따라서, 내가 사용에 필요 self.method()하거나 self.intvalue예를 들어,?

나는 아직 접하지 않은 덜 장황한 방법이 없는지 확인하고 싶습니다.


덜 장황한 방법은 없습니다. 항상 self.x인스턴스 속성에 액세스하는 데 사용 합니다 x. 그러나 thisC ++에서 와 달리은 self키워드가 아닙니다. 당신은 할 수 귀하의 방법을 원하는 이름의 첫 번째 매개 변수를 제공합니다,하지만 당신은 강력하게 전화의 규칙에 충실하는 것이 좋습니다 self.


나는 자연의 후속 질문에 대한 답변과 스벤의 (정확한) 응답을 보완 할 수 있습니다 (즉, 입니다 self명시 적보다는 암시?).

파이썬은 어휘 범위 지정 개념으로 작동하므로 이런 방식으로 작동합니다. 베어 이름 참조는 항상 현재 함수 정의 내의 로컬 변수, 포함하는 함수 정의의 로컬 변수, 모듈의 전역 변수 또는 내장을 참조합니다. (범위 지정은 기호 분석 중에 구문 분석 트리를 따를 때 어휘 적이므로 현재 함수까지의 경로에있는 함수 정의에 표시된 이름 만 기억하면됩니다. 다른 모든 항목은 "보이지 않음, 따라서 글로벌 또는 내장 ". 범위 지정 규칙 이 호출이 아닌 함수 정의 중첩과 관련된다는 점을 명시 적으로 언급 할 가치가 있습니다.

메서드는 이와 관련하여 특별한 대우를받지 않습니다. 클래스 문은 어휘 범위 지정 규칙과 거의 무관합니다. 일부 언어에 존재하는 동일한 날카로운 함수 대 메서드 구분이 없기 때문입니다 (대신 메서드는 다음과 같은 경우 함수에서 동적으로 생성됩니다. 관련 속성은 개체에서 검색됩니다).

이렇게하면 함수가 이미 정의 된 후 클래스에 추가 될 수 있으며 클래스 문의 본문 내에 정의 된 메서드 ( "몽키 패칭"으로 알려진 프로세스)와 구분할 수 없습니다.

객체 네임 스페이스는 어휘 범위 지정 규칙과 별개이므로 이러한 속성을 참조하는 다른 방법을 제공해야합니다. 이것은 명시 적 self.

복잡한 알고리즘의 경우 멤버 변수에 대한 참조를 메서드 내에서 로컬 변수로 캐시하는 것이 드문 일이 아닙니다.


첫째, Python self은 키워드가 아니라 Python의 cls.

Guido는 클래스에 대한 Python의 지원의 기원에 대해 매우 상세하고 귀중한 기사를 작성했으며 그 기사에서 Guido는 및를 사용하는 이유 selfcls필요한 이유를 설명 합니다.

http://python-history.blogspot.com/2009/02/adding-support-for-user-defined-classes.html을 참조하세요 .

참고 URL : https://stackoverflow.com/questions/6019627/python-self-keyword

반응형