Python
어트리뷰트 (Attribute), 프로퍼티 (Property), 디스크립터 (Descriptor)
Dan-k
2023. 8. 30. 10:00
반응형
어트리뷰트 (Attribute)
- 어트리뷰트는 파이썬 객체(object) 내에서 저장된 데이터(변수)나 메서드를 나타냄
- 객체의 속성(attribute)은 해당 객체의 상태나 동작을 나타내며, 객체의 내부 변수나 메서드 이름을 가리킴
- 어트리뷰트는 점(.)을 사용하여 객체의 이름 공간(namespace)에서 접근 가능
- 클래스의 멤버 변수나 메서드는 해당 클래스의 어트리뷰트
class MyClass:
class_attribute = 42 # 클래스 어트리뷰트
def __init__(self):
self.instance_attribute = 10 # 인스턴스 어트리뷰트
obj = MyClass()
print(obj.instance_attribute) # 인스턴스 어트리뷰트 접근
print(MyClass.class_attribute) # 클래스 어트리뷰트 접근
프로퍼티 (Property)
- 인스턴스 내 특수한 어트리뷰트로 어트리뷰트처럼 보이지만 실제로는 메서드
- @property 데코레이터와 관련되어 사용
- 클래스의 인스턴스 속성에 대한 접근을 제어하고자 할 때 사용되는 방법 중 하나
- 프로퍼티는 메서드처럼 보이지만, 실제로는 속성처럼 접근할 수 있음
- 변경
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@radius.setter
def radius(self, value):
if value < 0:
raise ValueError("Radius cannot be negative")
self._radius = value
circle = Circle(5)
print(circle.radius) # 프로퍼티를 통한 접근
circle.radius = 7 # 프로퍼티를 통한 설정
디스크립터 (Descriptor)
- 디스크립터는 속성의 접근을 커스터마이징하고 속성 값을 관리하기 위한 프로토콜
- __get__, __set__, __delete__ 메서드를 클래스 내에 정의하여 디스크립터를 생성할 수 있음
- __get__ ,__set__ , __delete__ 메소드 이런 메소드들 한개라도 정의되어 있는 클래스 -> 디스크립터
class DescriptorExample:
def __get__(self, instance, owner):
print("Getting the value")
return instance._value
def __set__(self, instance, value):
print("Setting the value")
if value < 0:
raise ValueError("Value cannot be negative")
instance._value = value
class MyClass:
descriptor_attr = DescriptorExample()
def __init__(self, value):
self._value = value
obj = MyClass(42)
print(obj.descriptor_attr) # 디스크립터를 통한 접근
obj.descriptor_attr = 10 # 디스크립터를 통한 설정
참고
[코드잇] 쉽게 배우는 파이썬 문법 - 프로퍼티(Property) 5편 by 코드잇
안녕하세요, 온라인 코딩 스쿨 코드잇입니다.오늘은 파이썬에서 프로퍼티(property)가 어떻게 작동하는지 그 원리를 배워볼게요. 프로퍼티의 원리를 배우기 위해 우리는 이전 글까지 파이썬의
www.theteams.kr
728x90
반응형
LIST