Python Class private을 구현할려면 어떻게 해야될까요?

GjtRoql의 이미지

Python으로 CGI 코딩을하다가 외부에서 악의적으로 접근하지 말았으면 하는 변수나 메쏘가 있어서 일반 자바나 C++ Class private을 구현할려고 봤더니 없더군요! 어떻게 구현 해야될까요?
아니면 저만 모르고 private 멤버가 있나요?
궁금하네요!

익명 사용자의 이미지

python reference manual을 읽어보시면 나옵니다.

http://www.python.org/doc/2.4/ref/atom-identifiers.html

GjtRoql의 이미지

감사합니다.

--------------
Burning Blue!
--------------

lifthrasiir의 이미지

GjtRoql wrote:
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가 있다고 해서 보안이 나아지는 건 아니라는 걸 아셨으면 합니다.

- 토끼군

hongminhee의 이미지

클로져(lexical closure)를 사용하면 데이터 은닉을 할 수 있긴 합니다. Python에서 자주 쓰이는 용례는 아니구요.

class person:
	def __init__(self, name):
		self.set_name(name)
 
	def set_name(self, name):
		self.get_name = lambda: name

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.