ProgrammingLanguage/Python

파이썬 필드 밑줄의 의미와 프로퍼티

JinungKim 2022. 2. 4. 09:53
파이썬 클린코드

 

파이썬은 프로퍼티가 없다. private, protected를 강제할 수는 없지만 밑줄 하나를 통해 이를 관습적으로 사용한다.

밑줄을 두 개 쓰면 외부에 감출 수는 있지만, 맹글링을 통해 전혀 다른 이름을 생성하므로 주의가 필요하다.

class Connector:
    def __init__(self, source):
        self.source = source
        self._timeout = 60

위 클래스에서 source를 파라미터로 받고 timeout은 self._timeout 속성은 밑줄을 추가해서 프라이빗한 필드임을 명시했다. 

다만 외부에서 접근은 가능하다. 

 

class Connector:
    def __init__(self, source):
        self.source = source
        self.__timeout = 60

    def connect(self):
        print("Connecting with {}s".format(self.__timeout))


conn = Connector("postgresql://localhost")
print(vars(conn)_
print(conn._Connector__timeout)

__timeout 속성에 접근하려면 위처럼 접근을 해야만 한다.

이는 여러 번 확장되는 클래스의 메서드를 이름 충돌 없이 오버라이드하기 위해 만들어진 것으로 private을 위한 용도가 아니다.


 

 

(변경은 getter, setter 함수 활용... 책이 볼륨은 작은데 읽기가 쉽지 않다. 틈날때 천천히 읽으면서 내용 추가)