이름 앞에 _(밑줄)쳐져 있는 객체는 뭔가요?


객체 이름 맨 앞에 밑줄이 하나 있는 거랑 두개 있는 건 무슨 차이인가요? 왜 쓰는거죠? 함수나 변수에도 똑같은 의미로 쓰이나요?

  • 2016년 01월 15일에 작성됨

조회수 279


1 답변


좋아요
0
싫어요
채택취소하기

_: 클래스 안에서 _이름과 같이 쓰는 것은 프로그래머에게 attributemethodprivate임을 알려주기 위한 용도입니다. import *했을 때 이름이 _로 시작하는 object는 import 되지 않지요. 그 외에는 별 다른 기능은 없습니다.

__(Name Mangling):

이름이 두 개 이상의 밑줄로 시작하는 identifier_classname__spam 형태로 바뀝니다. 그래서 보통 class-private 인스턴스나 class 변수, method, 전역 변수 등을 정의하는데 쓰이지요.

다만 주의할 점은 이런 mangling은 우연히 private에 접근하는 것을 막아주는 역을 할 뿐, 마음먹으면 private에 접근/수정하는 건 여전히 가능합니다.

class foo():
    def __init__(self):
        self.__myPrivateInt = 3

    def printPrivate(self):
        print(self.__myPrivateInt)

myfoo = foo()
#print myfoo.__myPrivateInt #직접 접근 -> 에러

mydict = myfoo.__dict__
mydict['_foo__myPrivateInt'] = 4 #__myPrivateInt 바뀜
myfoo.printPrivate()

결과 : 4

  • 2016년 01월 15일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close