6.9 private 네임 맹글링

  • 파이썬은 클래스 정의 이외에서 볼 수 없도록 하는 속성에 대한 네이밍 컨벤션이 있다.
  • 속성 이름앞에 두개의 언더스코어(__)[던더]를 붙이면 된다
    class Duck():
    def __init__(self, i_name):
    self.__name = i_name
    @property
    def name(self):
    print('inside the getter')
    return self.__name
    @name.setter
    def name(self, i_name):
    print('inside the setter')
    self.__name = i_name
    
    fow1 = Duck('Howard')
    fow1.name
    

    inside the getter ‘Howard’

    fow1.name = 'Donald'
    

    inside the setter

    fow1.name
    

    inside the getter ‘Donald’

    fow1.__name
    
      AttributeError Traceback (most recent call last)
      <ipython-input-8-41d57c24dae8> in <module>()
      ----> 1 fow1.__name
    
      AttributeError: 'Duck' object has no attribute '__name'
    

이 네이밍 컨벤션은 속성을 private로 만들지 않지만, 파이썬은 이 속성이 우연히 외부 코드에서 발견할 수 없도록 이름을 맹글링 했다.

fow1._Duck__name

‘Donald’

Comments