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

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

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

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.