밑줄 대 변수 및 방법이 있는 이중 밑줄
누군가가 저에게 __method()가 엉망진창이라고 설명해 줄 정도로 친절했지만, 도움이 필요한 다른 사람들이 많기 때문에 그를 더 귀찮게 하는 대신, 저는 누군가가 차이점을 더 자세히 설명해 줄 수 있는지 궁금합니다.
예를 들어, 저는 망글링이 필요하지 않지만 누군가가 예를 들어 할 수 없도록 개인적으로 유지해야 합니다._어쨌든?아니면 다른 변수를 고유하게 만들어 덮어쓰지 않게 하는 것일까요?내부 방법을 "숨긴" 것은 필요하지 않지만 사용하기 위해 특정한 방법이기 때문에 강의실 밖에서 사용하는 것은 원하지 않습니다.
PEP 8에서:
_single_leading_underscore약한 "내부 사용" 표시기.예.
from M import *이름이 밑줄로 시작하는 개체는 가져오지 않습니다.
single_trailing_underscore_Python 키워드와의 충돌을 피하기 위해 관습에 의해 사용됩니다.
Tkinter.Toplevel(master, class_='ClassName')
__double_leading_underscore클래스 속성의 이름을 지정할 때 이름 망글링(이름 망글링)을 호출합니다.FooBar,__boo된다_FooBar__boo아래 참조).__double_leading_and_trailing_underscore__사용자가 제어하는 네임스페이스에 상주하는 개체 또는 속성을 "지정"합니다.예.__init__,__import__또는__file__이러한 이름은 작성하지 마십시오. 문서화된 이름만 사용하십시오.
속성:
interface,_internal,__private하지만 피하려고 노력하세요.
__private형태. 절대 사용하지 않습니다.절 믿으세요.만약 당신이 그것을 사용한다면, 당신은 나중에 후회할 것입니다.설명:
C++/Java 배경을 가진 사람들은 특히 이 "기능"을 남용하거나 잘못 사용하는 경향이 있습니다.그렇지만
__private이름은 Java 또는 C++에서와 같은 방식으로 작동하지 않습니다.하위 클래스에서 우발적인 네임스페이스 충돌을 방지하기 위한 이름 망글링만 트리거합니다.MyClass.__private가 딱MyClass._MyClass__private(이마저도 슈퍼클래스와 같은 이름을 가진 서브클래스(예: 다른 모듈의 서브클래스)의 경우에는 세분화됩니다.)에 액세스할 수 있습니다.__private그들의 클래스 밖에서 온 이름들, 단지 불편하고 연약할 뿐입니다 (그것은 슈퍼 클래스의 정확한 이름에 의존합니다).문제는 클래스의 작성자가 합법적으로 "이 속성/메소드 이름은 비공개여야 하며 이 클래스 정의 내에서만 액세스할 수 있어야 한다"고 생각하고 다음을 사용할 수 있다는 것입니다.
__private이름에 수 .그러나 나중에 해당 클래스의 사용자가 해당 이름에 대한 액세스가 합법적으로 필요한 하위 클래스를 만들 수 있습니다.따라서 슈퍼클래스는 수정되어야 하거나(어렵거나 불가능할 수 있음), 서브클래스 코드는 수동으로 망가진 이름을 사용해야 합니다(가장 보기 흉하고 깨지기 쉬운 이름).Python에는 다음과 같은 개념이 있습니다."우리 모두는 여기서 동의하는 어른들입니다."를 사용하는 경우
__private폼, 당신은 누구로부터 속성을 보호하고 있습니까?슈퍼클래스의 속성을 적절하게 사용하는 것은 서브클래스의 책임이고, 그 속성을 적절하게 문서화하는 것은 슈퍼클래스의 책임입니다.줄로 밑줄 단일선언두더스좋표다습니것이사기는용하어코법을▁the,ention-▁it▁single를 사용하는 것이 좋습니다.
_internal"이것은 전혀 이름을 더럽힌 것이 아닙니다. 다른 사람들에게 "내부 구현 세부 사항이므로 주의하십시오. 완전히 이해하지 못하면 만지지 마십시오."라고 말합니다.하지만 그건 단지 관례일 뿐입니다.
하나의 선행 밑줄은 단순히 "이것을 사용해서는 안 됩니다."라는 의미의 규약입니다.다른 사람이 속성을 사용하는 것을 막는 것은 아무것도 하지 않습니다.
두 개의 선행 밑줄은 실제로 속성의 이름을 변경하여 상속 계층의 두 클래스가 동일한 속성 이름을 사용할 수 있도록 하며 서로 충돌하지 않습니다.
Python에는 액세스 제어가 없습니다. 수 에는 망가진 : 클스의모속액수할있며으세, 는다포다니이함됩같은름이음과여기에래든성에스▁(▁youas다니,포▁mang됩함)이 포함됩니다._class__variable. 자신으로부터 개발자들을 그들 자신으로부터 보호하려고 하지 말고 당신의 코드와 API에 집중하세요.
언급URL : https://stackoverflow.com/questions/6930144/underscore-vs-double-underscore-with-variables-and-methods
'programing' 카테고리의 다른 글
| DB에 대한 기존 연결을 닫는 방법 (0) | 2023.07.19 |
|---|---|
| 파이썬이 함수 정의를 인쇄할 수 있습니까? (0) | 2023.07.19 |
| Matplotlib: 다른 그래프 요소 뒤에 격자선 그리기 (0) | 2023.07.19 |
| 페이지 간 데이터 전달 모범 사례 (0) | 2023.07.19 |
| 배열을 두 번 정렬하지 않고 Python/NumPy를 사용하여 배열의 항목 순위 지정 (0) | 2023.07.19 |