Python으로 CGI 코딩을하다가 외부에서 악의적으로 접근하지 말았으면 하는 변수나 메쏘가 있어서 일반 자바나 C++ Class private을 구현할려고 봤더니 없더군요! 어떻게 구현 해야될까요?
아니면 저만 모르고 private 멤버가 있나요?
궁금하네요!
파이썬에는 private이라는 개념이 없습니다. 이름 앞에 __를 붙이는 것은 자식 클래스가 부모 클래스의 변수를 덮어 쓰는 것을 방지하기 위해서 자동으로 mangling을 해 주는, 일종의 protected를 "흉내내는" 것에 불과하며, 이 역시 맘만 먹으면 뚫어 버릴 수 있습니다. -_-;
파이썬 튜토리얼에 보면 이런 말이 있습니다:
Quote:
As is true for modules, classes in Python do not put an absolute barrier between definition and user, but rather rely on the politeness of the user not to "break into the definition."
모듈에서도 그렇듯이, 파이썬의 클래스는 정의와 사용자 사이에 절대적인 장벽을 놓는다기보다는 "정의를 바깥에서 깨부수지 않는" 사용자의 정중함에 의존하고 있다고 할 수 있다.
이런 철학 때문에 파이썬에는 private가 없습니다. 단지 웬만하면 고치지 않는 게 정신 건강에 이롭다는 걸 나타내기 위해서 흔히 앞에 _를 붙이곤 하므로 이런 건 안 고치는 게 좋겠죠. 마지막으로 private가 있다고 해서 보안이 나아지는 건 아니라는 걸 아셨으면 합니다.
python reference manual을 읽어보시면 나옵니다.
python reference manual을 읽어보시면 나옵니다.
http://www.python.org/doc/2.4/ref/atom-identifiers.html
감사합니다.
감사합니다.
--------------
Burning Blue!
--------------
Re: Python Class private을 구현할려면 어떻게 해야될까요?
파이썬에는 private이라는 개념이 없습니다. 이름 앞에 __를 붙이는 것은 자식 클래스가 부모 클래스의 변수를 덮어 쓰는 것을 방지하기 위해서 자동으로 mangling을 해 주는, 일종의 protected를 "흉내내는" 것에 불과하며, 이 역시 맘만 먹으면 뚫어 버릴 수 있습니다. -_-;
파이썬 튜토리얼에 보면 이런 말이 있습니다:
이런 철학 때문에 파이썬에는 private가 없습니다. 단지 웬만하면 고치지 않는 게 정신 건강에 이롭다는 걸 나타내기 위해서 흔히 앞에 _를 붙이곤 하므로 이런 건 안 고치는 게 좋겠죠. 마지막으로 private가 있다고 해서 보안이 나아지는 건 아니라는 걸 아셨으면 합니다.
- 토끼군
클로져(lexical
클로져(lexical closure)를 사용하면 데이터 은닉을 할 수 있긴 합니다. Python에서 자주 쓰이는 용례는 아니구요.
댓글 달기