본문 바로가기
[Language] - Python

#2. 접근제한자 (Access Modifier)

by Bebsae 2020. 12. 14.

오늘은 파이썬의 접근제한자에 대해 다뤄보겠다. 파이썬을 사용하며 익숙해질때쯔음.. 무언가 이상한 점을 느꼈다. 왜 파이썬에서는 public, protected, private이라는 키워드를 본적이 없지? 궁금해진 필자는 쏜살같이 구글링을 하며 찾은 내용들을 여기다가 정리한다.

 

일단 결론부터 얘기하면 파이썬에 접근제한자에 대한 키워드는 없다. 그럼 어떡함? 이라는 의문이 들것이다.

 

정답은 명명규칙에 있었다.

멤버(함수, 변수)명 앞에 _를 한 번 쓰면 protected

멤버(함수, 변수)명 앞에 _를 두 번 쓰면 private

주의할 점은 멤버명 뒤에 _를 두 번 쓰면 다시 public이 된다.

 

public member, member__, _member__, __member__
protected _member, _member_
private __member, __member_
class Aa:
    __prv = 1
    __pub__ = 2
    _pro = 3
    pub = 4

    @property
    def prv(self):
        return self.__prv

    @prv.setter
    def prv(self, value):
        self.__prv = value

    @property
    def pro(self):
        return self._pro

    @pro.setter
    def pro(self, value):
        self._pro = value


a = Aa()

print(a.prv)
print(a.__pub__)
print(a.pro)
print(a.pub)

a.prv = 20
a.pro = 30
print(a.prv)
print(a.pro)
1
2
3
4
20
30

 

@property, @멤버명.setter 데코레이터는 각각 getter, setter를 편리하게 구현할 수 있다. 보다시피 뒤에 언더바(_)를 두 번 쓴 __pub__ 멤버는 public으로 처리되어 접근이 가능하다. 

'[Language] - Python' 카테고리의 다른 글

#5. 덕 타이핑 (Duck Typing)  (2) 2020.12.29
#4. 추상 클래스 (Abstract Class)  (0) 2020.12.28
#3. pickle 모듈  (0) 2020.12.18
#1. staticmethod, classmethod, instancemethod  (0) 2020.12.09
#0. args, kwargs  (0) 2020.12.09

댓글