-
[Python] 접근 제어자언어/파이썬 & 장고 2016. 10. 7. 14:04
다른언어와 달리 private, public 등의 접근제어자 키워드가 존재하지 않고 작명법(naming)으로 접근제어를 합니다. public, private, protected에 대한 규칙은 다음과 같습니다.
public private protected 아무 밑줄이 접두사에 없어야 함
ex) num
두개의 밑줄 __이 접두사여야 함
ex) __num
한 개의 밑줄 _이 접두사여야 함
ex) _num
접미사는 밑줄이 한 개까지만 허용
ex) __num_
접미사의 밑줄이 두 개 이상이면 public으로 간주
ex) __num__
예제
# -*- coding: utf-8 -*-
class HasPrivate:
def __init__(self):
self.public = "PUBLIC"
self.__private = "PRIVATE"
self._protected = "PROTECTED"
def print_test(self):
print(self.public)
print(self.__private)
print(self._protected)
obj = HasPrivate()
obj.print_test() # HasPrivate의 print_test() 함수는 같은 클래스의 멤버이기 때문에 public, __private 두 데이터 속성에 자유롭게 접근 가능
# 결과
# PUBLIC
# PRIVATE
print(obj.public)
# 결과
# PUBLIC
print(obj._protected)
# 결과
# PROTECTED
print(obj.__private) # HasPrivate 객체 외부에서는 __private가 보이지 않기 때문에 접근할 수 없음
# AttributeError: HasPrivate instance has no attribute '__private'