카테고리 없음

python object 접근제어

YUM 2021. 5. 19. 11:03

Public : name : object 외부에서 접근 허용

Protected : _name : object 외부에서 접근은 가능하나 권장하지 않음

Private : __name : object 외부에서 접근 불가

   *_ClassName__PrivateName 의 형태로 private 변수에 접근 가능, 부모클래스와 서브클래스 내 변수 구별

 

class A :
    def __init__(self):
        self.public_name = 'public'
        self._protected_name = 'protected'
        self.__private_name = 'private'
    
    def print_vars(self):
        print(self.__private_name)

a = A()

print(a.public_name) #출력 : public
print(a._protected_name) #출력 : protected
a.print_vars() #출력 : private (메소드를 통한 내부 접근은 허용)
print(a._A__private_name) #출력 : private (클래스 생성자에 있는 private 변수에 접근 가능)
print(a.__private_name) #error 발생

 

속성충돌방지 : private 변수는 같은 이름을 가진 여러 class 내 변수들을 구분하는데도 사용할 수 있다.

class Parent_class :
    def __init__(self) :
        self.__name = 'parent class'
    
    def get(self):
        return self.__name


class Sub_class(Parent_class) : #Parent_class를 상속받은 Sub_class
    def __init__(self) :
        super().__init__() # 부모 클래스의 init 함수 호출을 위한 코드
        self._name = 'sub class'

s = Sub_class()
print(s.get()) #출력 : 'parent class'
print(s._name) #출력 : 'sub class'

같은 변수 명인 name에 대해서 부모 클래스 내 변수와 자식 클래스 내 변수를 다르게 처리하는 것을 볼 수 있다.