-
python property 사용하기프로그래밍/Python 2022. 3. 12. 16:35반응형
안녕하세요 까치입니다.
이번에는 python 내장함수
property 데코레이터에 대해 알아보겠습니다.
property
예시로 클래스를 이용할때는 __init__함수를 사용하여 생성자를 만들어줍니다. 이부분은 다 아실거라 생각고 넘어 가겠습니다. 안에 필드명을 name, age, grade로 설정 하였습니다.
class Student: def __init__(self, name, age, grade): self.name = name self.age = age self.grade = grade
self의 name, age , grade를 담아 객체를 만들었을 때 내용이 담기도록 설정 하였습니다. 여기서 그럼 생성한 객체에서 값을 재설정하고, 다시 출력하는 기능을 구현을 해야 하는데 이 부분은 다른 언어에서 사용하는 getter, setter로 정의하여 사용이 가능합니다.
def get_name(self): return self.__name def set_name(self, setName): self.__name = setName
이렇게 getter, setter를 구형하여 객체의 내용을 출력 및 재정의 할 수 있습니다.
name = 'hong' age = 20 grade = 'A' student = Student(name, age, grade) print(student.get_name()) # 출력 hong student.set_name('jang') print(student.get_name()) # 출력 jang
자 이렇게 일반적으로 객체를 만들고 getter,setter를 사용하여 변화 및 출력을 하는 경우를 알아 봤는데 python에서는 property라는 내장함수가 정의가 되어있어 더 간단하게 getter,setter를 구현 할 수 있습니다.
class Student: def __init__(self, name, age, grade): self.name = name self.age = age self.grade = grade def get_name(self): return self.__name def set_name(self, setName): self.__name = setName # 중요한 부분!!!!!!! name = property(get_name, set_name) name = 'hong' age = 20 grade = 'A' student = Student(name, age, grade) #!!!!!!!!!!!!!!!!!!!!! # student.get_name() -> student.name 으로 getter, setter 사용가능 #!!!!!!!!!!!!!!!!!!!!! print(student.name) #출력 hong student.name = 'jang' print(student.name) #출력 jang
property 내장함수에 위에 정의한 get_name, set_name을 넣어서 설정을 해주면 기존에 작성해야했던
student.get_name(), student.set_name()이라는 부분이 없어지고 student.name으로 통일되어 사용이 가능합니다.
아래같이 @property라는 데코레이터를 작성하여도 동일하게 작동합니다. @property 데코레이터를 사용할려고 할 때는 getter에 @property 장식자를 설정하고 setter에 @필드명.setter를 설정하여 사용합니다.
class Student: def __init__(self, name, age, grade): self.name = name self.age = age self.grade = grade # 정의할 함수에 데코레이터 작성하기 @property def get_name(self): return self.__name # 필드명.setter @name.setter def set_name(self, setName): self.__name = setName
여기까지가 property내장함수 @property데코레이터에 대한 설명 이였습니다.
그리고 코드를 작성하다가 발견한 것이 getter에 self__name으로 설정을 하는 부분이 있는데 이 부분은 캡슐화에 대한 내용입니다. '_' (언더바)를 두개 작성을 하면 python에서는 다른 곳에서 가져다 사용할 수 없게 되어 캡슐화가 가능합니다. java에서는 private 변수 같은 개념이라고 생각하시면 될것같습니다. python 에서는 타입에대해 힌트를 주는 경우가 있지만 타입을 명시하는 경우가 없기 때문에 캡슐화를 구현하기 위해 만들어놓은 기능인 것같습니다. 다음에는 '_'(언더바)에 대한 내용을 다루오 보도록 하겠습니다.
반응형'프로그래밍 > Python' 카테고리의 다른 글
Alembic 사용법 (python data migrations) (0) 2024.05.05 python pyenv로 가상화 환경 만들기 (0) 2024.05.04 python 패키지 관리를 위한 poetry 패키지 매니저 활용법 (0) 2024.05.04 [python] return에서 or/and 연산자 사용법 (0) 2021.06.17