Python에서 @property
데코레이터는 메서드를 클래스의 속성처럼 접근할 수 있게 해줍니다. 이를 사용하면, 메서드를 호출하는 것처럼 보이지 않고 속성에 접근하는 것처럼 코드를 작성할 수 있습니다. 이러한 방식은 파이썬스러운(pythonic) 방식으로 디자인할 수 있도록 한다고 합니다.
예제
예를 들어, 다음과 같은 클래스를 정의합니다.
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
return self._radius
@property
def diameter(self):
return self._radius * 2
def area(self):
return 3.14 * self._radius ** 2
이 클래스에는 radius
, diameter
, 그리고 area
라는 세 가지 메서드가 있습니다. radius
와 diameter
에는 @property
데코레이터가 붙어있고, area
에는 붙어있지 않습니다.
이제 이 클래스의 인스턴스를 생성하고, 메서드와 속성에 접근하면 아래와 같습니다.
c = Circle(5)
# @property가 붙은 메서드는 속성처럼 접근합니다.
print(c.radius) # 5 출력
print(c.diameter) # 10 출력
# @property가 붙지 않은 메서드는 함수처럼 호출해야 합니다.
print(c.area()) # 78.5 출력
@property
데코레이터가 붙은 메서드는 소괄호를 사용하지 않고 접근할 수 있습니다. 반면에, @property
가 없는 메서드는 함수처럼 호출해야 합니다(소괄호를 사용해야 합니다).
@property
를 사용하는 경우는 주로, 인스턴스의 상태를 나타내는 값을 계산해서 제공할 때 사용됩니다. 이렇게 하면 클라이언트 코드가 해당 객체의 내부 구현에 대해 알 필요 없이, 일관된 방식으로 속성에 접근할 수 있습니다.
'Python > Python' 카테고리의 다른 글
Python) 위치 인자, 키워드 인자 (0) | 2023.07.25 |
---|---|
@classmethod 와 @staticmethod (0) | 2023.07.20 |
glob.glob() 함수 (0) | 2023.06.11 |
Python 라이브러리 - functools (0) | 2023.05.24 |
Python 라이브러리 - itertools (0) | 2023.05.20 |