실제 용어로(실제로), 파이썬에는 파이썬에서 개인 멤버 변수라는 것이 없습니다. 그러나 시작 부분에 두 개의 밑줄(__)을 추가하면 변수나 메서드가 비공개로 만들어지는 것이 대부분의 파이썬 코드에서 사용되는 규칙입니다.
예제를 통해 이 개념을 이해합시다 -
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으로 대체됩니다. , 여기서 클래스 이름 선행 밑줄이 제거된 현재 클래스 이름입니다. 이 맹글링은 클래스 정의 내에서 발생하는 한 식별자의 구문 위치와 관계없이 수행됩니다.
이중 밑줄 이름은 대신 하위 클래스에서 우발적으로 재정의하는 것을 방지하기 위한 것입니다.