Java의 Spring 프레임워크는 애노테이션(@)을 적극적으로 사용합니다. 어느게 먼저인지는 모르겠으나, 파이썬도 마찬가지로 애노테이션(@) 문법을 지원합니다. 파이썬에선 이를 '데코레이터'라고 부릅니다. 다음은 데코레이터를 사용하여 property를 등록하는 예제입니다.

class MyObject():
    def __init__(self, name):
        self.hidden_name = name
        
    @property
    def name(self):
        print("Called getter")
        return self.hidden_name
        
    @name.setter
    def name(self, name):
        print("Called setter")
        self.hidden_name = name

 

파이썬에선 private 접근지정자가 없기 때문에 위의 예제에서 초라하게 변수명에 hidden을 붙여줬습니다. 정말 이렇게 사용해야한다면 많이 난감할겁니다. 이에 파이썬은 클래스 정의 외부에서 멤버변수를 볼 수 없도록 하는 멤버변수(속성)에 대한 '네이밍 컨벤션(naming convention)' 이 있습니다. 멤버변수명 앞에 2개의 언더바(__)를 붙이면 됩니다. 위의 예제의 변수명을 수정해보겠습니다.

class MyObject():
    def __init__(self, name):
        self.__name = name
        
    @property
    def name(self):
        print("Called getter")
        return self.__name
        
    @name.setter
    def name(self, name):
        print("Called setter")
        self.__name = name

 

위와 같이 변수명을 설정함으로써 해당 멤버변수를 외부 코드에서 발견하고 직접적으로 접근할 수 없도록 이름을 맹글링(mangling) 하였습니다. 물론 이것이 멤버변수를 완벽하게 보호할 수 있는 것은 아닙니다만, 의도적인 직접 접근을 어렵게 만드는 아주 좋은 방법입니다.