데이터과학 삼학년

어트리뷰트 (Attribute), 프로퍼티 (Property), 디스크립터 (Descriptor) 본문

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
Comments