https://docs.python.org/3/tutorial/classes.html#random-remarks
클래스 속성과 인스턴스 속성의 이름 충돌 시
- 항상 가까운 것이 우선 (인스턴스 속성이 우선 된다.)
- 데이터 숨김:
- 관례로
_name,__name(맹글링) 정도만 사용. 언어 차원 강제 없음. _는 신호만,__는 신호 + 맹글링(충돌 회피)_name: “내부용/비공개 의도”를 알리는 관례적 접두어. 접근·수정 가능하며 특별 처리 없음.__name: 이름 맹글링 대상. 클래스 정의 시_ClassName__name으로 바뀌어 저장되어 서브클래스와의 이름 충돌을 피하는 용도. 접근, 수정 가능
- 관례로
- 인스턴스에 임의 속성 추가 가능하지만, 네이밍 충돌 피하기.
- 메서드 내부에서도
self.attr처럼 명시 - self는 단순 관례 이름일 뿐 특별 의미 없음.
- 클래스 속성에 함수 객체를 할당하면 메서드가 됩니다(클래스 정의 밖 함수라도 할당하면 메서드로 동작).
- 메서드 간 호출은 self.other_method() 형태로 수행.
- 메서드의 전역 스코프는 그 함수가 정의된 모듈입니다(클래스가 전역 스코프가 아님).
- 모든 값은 객체이고 타입 정보를
obj.__class__에 가집니다