파이썬의 접근 제어자는 public
, protected
, private
가 있다.
단, 파이썬에서는 다른 객체지향 언어와 달리 실제로 접근을 막지 않는다. 따라서 언더바('_')를 이용해 접근 제어자 기능을 수행한다.
prefix | postfix | |
---|---|---|
public | var | __var__, _var__ |
private | __var | __var_ |
protected | _var | _var_ |
접미사(postfix)에 언더바가 2개 ('__') 이상인 경우에 public으로 간주한다.
class K():
pub = 1
pub__ = 2
__prv = 3
__prv_ = 4
__prv__ = 5
_prt = 6
_prt_ = 7
_prt__ = 8
>>> k = K()
>>> k.pub
1
>>> k.pub__
2
>>> k.__prv
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'K' object has no attribute '__prv'
>>> k.__prv_
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'K' object has no attribute '__prv_'
>>> k.__prv__
5
>>> k._prt
6
>>> k._prt_
7
>>> k._prt__
8
__prt_와 __prt__에는 접근할 수 없지만 _K__prv, _K___prv_에는 접근이 가능하다.
>>> k._K__prv
3
>>> k._K__prv_
4
class K():
__prv = 1
_K__my_prv = 2
def show(self):
print(self.__prv,self.__my_prv)
k = K()
k.show()
>>> 1, 2
따라서 역으로 클래스 이름을 접두사로 붙인다면 접근이 가능하다.