1cfd3bbb56
Topic_CSS/Topic_HTML/Topic_JavaScript/Topic_Prompt/Topic_Comfyui 등 기존 카테고리 폴더를 정리하고, Topic_Graphic/Dev 등 신규 산출물과 Topics 내부 세션/메모리 기록을 동기화.
4.6 KiB
4.6 KiB
id, title, category, status, verification_status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, created_at, updated_at, review_reason, merge_history, tags, raw_sources, applied_in, github_commit
| id | title | category | status | verification_status | canonical_id | aliases | duplicate_of | source_trust_level | confidence_score | created_at | updated_at | review_reason | merge_history | tags | raw_sources | applied_in | github_commit | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| python-encapsulation | Python Encapsulation | Programming_Language | draft | conceptual |
|
B | 0.9 | 2026-07-04 | 2026-07-04 |
|
|
Python Encapsulation
🎯 한 줄 통찰 (One-line insight)
Python has no true private access control — double-underscore "private" properties are just name-mangled to _ClassName__prop internally, still technically accessible from outside if you know the mangled name, which is why it's a convention backed by tooling, not a hard security boundary. [S1]
🧠 핵심 개념 (Core concepts)
- Encapsulation — keeping data and methods together in a class while controlling external access; protects against accidental changes. [S1]
- Private properties (
__prefix) — cannot be accessed directly from outside the class. [S1] - Getter method — a method that returns a private property's value. [S1]
- Setter method — a method that sets/validates a private property's value. [S1]
- Protected properties (
_prefix) — a convention only; Python does NOT enforce this restriction. [S1] - Private methods (
__prefix) — same restriction as private properties; can only be called from within the class. [S1] - Name mangling — Python internally renames
__ageto_ClassName__age; this is HOW "private" is implemented. [S1]
🧩 추출된 패턴 (Extracted patterns)
- Name mangling reveals private isn't truly private —
p1._Person__agestill works and accesses the "private" value directly — Python's encapsulation is a naming convention enforced by mangling, not a hard access-control mechanism like in some other languages. [S1] - Getter+setter enables validation — a setter like
set_age()can reject invalid values (if age > 0: ...) at the point of mutation, something direct attribute assignment can't do. [S1]
📖 세부 내용 (Details)
- Private property (inaccessible directly):
class Person: def __init__(self, name, age): self.name = name; self.__age = age—p1.__ageerrors. [S1] - Getter:
def get_age(self): return self.__age. [S1] - Setter with validation:
def set_age(self, age): if age > 0: self.__age = age else: print("Age must be positive"). [S1] - Protected (convention only):
self._salary = salary— accessible but discouraged. [S1] - Private method:
def __validate(self, num): ...— callable only internally. [S1] - Name mangling revealed:
print(p1._Person__age)— works, but not recommended. [S1]
⚖️ 모순 및 업데이트 (Contradictions & updates)
- "Private"가 진짜 비공개가 아님: 네임 맹글링된 이름(
_ClassName__prop)으로 여전히 접근 가능하다는 점이 소스에서 명시적으로 경고됨 — "not recommended"라고 언급하지만 기술적으로는 우회 가능. [S1]
🛠️ 적용 사례 (Applied in summary)
현재 발견된 실제 적용 사례가 없습니다 — Student 클래스의 성적 검증(set_grade)처럼 값 검증이 필요한 속성에 표준적으로 쓰인다. [S1]
💻 코드 패턴 (Code patterns)
Getter/setter with validation (Python):
class Person:
def __init__(self, name, age):
self.name = name
self.__age = age
def get_age(self):
return self.__age
def set_age(self, age):
if age > 0:
self.__age = age
else:
print("Age must be positive")
✅ 검증 상태 및 신뢰도
- 상태: draft
- 검증 단계: conceptual
- 출처 신뢰도: B (W3Schools — widely used educational reference, not a primary standards body)
- 신뢰 점수: 0.90
- 중복 검사 결과: 신규 생성 (New discovery)
🔗 지식 그래프 (Knowledge Graph)
- 상위/루트: Python Tutorial
- 관련 개념: Python Class Properties, Python Class Methods
- 참조 맥락: 데이터 보호/검증이 필요한 속성에 사용 — Python의 "private"은 관례일 뿐 강제되지 않음에 유의.
📚 출처 (Sources)
- [S1] W3Schools — Python Encapsulation — https://www.w3schools.com/python/python_encapsulation.asp
📝 변경 이력 (Change history)
- 2026-07-04: Initial draft synthesized from the W3Schools "Python Encapsulation" page (Astra wiki-curation, P-Reinforce v3.1 format).