Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 개인 변수

<시간/>

실제 용어로(실제로), 파이썬에는 파이썬에서 개인 멤버 변수라는 것이 없습니다. 그러나 시작 부분에 두 개의 밑줄(__)을 추가하면 변수나 메서드가 비공개로 만들어지는 것이 대부분의 파이썬 코드에서 사용되는 규칙입니다.

예제를 통해 이 개념을 이해합시다 -

privateVar1.py

클래스 myClass:__privateVar =27; def __privMeth(self):print("나는 myClass 클래스 안에 있습니다.") def hello(self):print("개인 변수 값:",myClass.__privateVar)foo =myClass()foo.hello()foo.__privateMeth 

위 프로그램에서 __privMeth는 private 메소드이고 __privateVar는 private 변수입니다. 이제 출력을 봅시다 -

출력

개인 변수 값:27Traceback(가장 최근 호출 마지막):파일 "C:/Python/Python361/privateVar1.py", 줄 12,  foo.__privateMethAttributeError:'myClass' 개체에 '__privateMeth' 속성이 없습니다. 

위의 출력에서 ​​"myClass" 클래스 외부에서 private 메서드와 private 변수에 액세스할 수 없음을 알 수 있습니다. 그러나 클래스(myClass) 내에서 개인 변수에 액세스할 수 있습니다. hello() 메서드에서 __privateVar 변수에 액세스할 수 있습니다(위의 "Private Variable 값:27" 참조).

따라서 위의 예에서 우리는 클래스 내부의 모든 변수와 메소드가 메소드에 의해 공개됨을 이해할 수 있습니다. 데이터 멤버를 private로 선언하면 클래스에서만 액세스할 수 있고 클래스 외부에서는 액세스할 수 없음을 의미합니다. 변수나 메서드를 비공개로 만드는 기술을 데이터 맹글링이라고 합니다. __spam 형식의 모든 식별자 (최소 2개의 선행 밑줄, 최대 1개의 후행 밑줄) 텍스트는 _classname__spam으로 대체됩니다. , 여기서 클래스 이름 선행 밑줄이 제거된 현재 클래스 이름입니다. 이 맹글링은 클래스 정의 내에서 발생하는 한 식별자의 구문 위치와 관계없이 수행됩니다.

이중 밑줄 이름은 대신 하위 클래스에서 우발적으로 재정의하는 것을 방지하기 위한 것입니다.