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 함수 활용... 책이 볼륨은 작은데 읽기가 쉽지 않다. 틈날때 천천히 읽으면서 내용 추가)