Python의 이중 밑줄 수수께끼: 개인 정보 보호에 대한 잘못된 약속
이중 밑줄이 있음에도 불구하고 Python의 "비공개" 방법은 놀랍게도 다음과 같습니다. 완전히 비공개는 아닙니다. 이 명백한 역설은 캡슐화에 대한 Python의 독특한 접근 방식에서 발생합니다.
이중 밑줄이 메서드나 변수 이름 앞에 붙으면 Python은 이를 이름을 변경하는 표시기로 해석합니다. 원래 이름을 사용하는 대신 밑줄, 클래스 이름 및 원래 이름을 연결합니다. 예를 들어 __myPrivateMethod는 _MyClass__myPrivateMethod가 됩니다.
이 이름 스크램블링 기술은 서브클래스가 실수로 슈퍼클래스에서 상속된 비공개 메서드와 속성을 재정의하는 것을 방지하는 데 사용됩니다. 예를 생각해 보십시오.
class Foo(object): def __init__(self): self.__baz = 42 def foo(self): print self.__baz
하위 클래스 Bar가 상위 클래스의 비공개 멤버와 동일한 이름을 가진 멤버를 정의하는 경우 Python의 이름 스크램블 메커니즘을 통해 해당 멤버가 고유하게 유지되고 잠재적인 충돌을 방지할 수 있습니다.
그러나 이 기술은 클래스 외부에서 Private 멤버에 고의적으로 접근하는 것을 막지는 못합니다. 아래 예에서 볼 수 있듯이 변경된 이름을 사용하여 이름이 변경된 전용 멤버에 직접 액세스할 수 있습니다.
x = Foo() print x._Foo__baz # Output: 42
따라서 Python의 이중 밑줄 규칙은 개인 정보 보호라는 환상을 만들어내지만 궁극적으로 약한 형태의 캡슐화입니다. 서브클래스에 의한 우발적인 메소드 재정의를 방지하지만 외부 엔터티의 의도적인 액세스를 방지할 수는 없습니다.
위 내용은 Python의 이중 밑줄 표기법은 진정한 형태의 데이터 프라이버시입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!