파이썬 클래스 getter/setter, property, mangling

Code Snippets 2021. 4. 28. 12:10

getter/setter는 내부 변수의 getter/setter 함수를 퍼블릭(public)으로 만들어 직접적으로 변수에 접근하지 못하도록 하여 캡슐화 하기 위해서 사용한다. 파이썬도 엄연히 객체지향 언어이니 getter/setter 함수를 이용하여 변수를 캡슐화할 수 있으며, 이때 파이썬에서는 property라는 녀석을 이용하게 된다. 정말 파이썬은 알면 알수록 별에 별게 다 있는 것 같다.

class Person:
    def __init__(self, first_name, last_name):
        self.name = name
        self.age = age
    
    def set_name(self, name):
        if type(name) == str:
            self.name = name
        else:
            print("error")
    
    def get_name(self):
        return self.name
    
    name = property(get_name, set_name)

 

맹글링(mangling)이라는 것도 있다. 이건 아예 내부 변수로의 직접적인 접근을 원천적으로 차단하기 위한 목적으로 사용하는데, 언더바 두개(__)를 이용해서 변수명을 내부적으로 바꿔버리는 방법이다. 간혹 언더바 두개를 왜 이렇게 많이들 쓰나 싶었는데 이게 다 이유가 있었던 거다. 근데 이게 변수명 앞에 클래스명을 넣는 방식이라 왠지 눈 가리고 아웅하는 것 같기는 하다... (ㅋㅋ)

class Example:
    def __init__(self, num1, num2):
        self.num1 = num1
        self.__num2 = num2


exam = Example(1, 2)
exam.__num2 # 에러 발생
exam._Example__num2 # 정상 출력. 맹글링에 의해 변수명을 내부적으로 바뀌버림

'Code Snippets' 카테고리의 다른 글

파이썬 판다스 소스코드 메모  (0) 2021.04.29
파이썬 넘파이 행렬 생성 관련 함수 정리  (0) 2021.04.28
파이썬 list comprehension  (0) 2021.04.28
파이썬 decorator  (0) 2021.04.22
파이썬 map, filter, reduce 함수  (0) 2021.04.22
admin