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

조회수 3114회

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

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    _: 클래스 안에서 _이름과 같이 쓰는 것은 프로그래머에게 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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)