<aside> 💡 값을 반환하거나 저장하는 메소드를 마치 속성처럼 간편하게 사용할 수 있도록 하는 기능입니다. 특정 속성값의 반환과 저장 방식을 제어하는 역할도 합니다.
</aside>
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:
self._radius = value
else:
print("반지름은 음수가 될 수 없습니다.")
@property
def diameter(self):
return self._radius * 2
@property
def area(self):
return 3.14 * self._radius ** 2
_ 을 붙여 구분circle_1 = Circle(3)
circle_1_rad = circle_1.radius
circle_1.radius = 5 # 🔴
circle_1.radius = -2
circle_1_diameter = circle_1.diameter
circle_1_area = circle_1.area
특정 속성을 바꾸지 않도록
class YalcoChicken:
company_name = "얄코치킨"
# 다음에 오픈할 매장의 번호
next_no = 1
def __init__(self, name):
self._no = YalcoChicken.next_no
self.name = name
YalcoChicken.next_no += 1
def intro(self):
return f"안녕하세요, {YalcoChicken.company_name} {self.no}호 {self.name}점입니다!"
@property
def no(self):
return str(self._no) + "번 매장"
@no.setter
def no(self, value):
raise AttributeError("매장 번호는 바꾸지 않습니다.")
# Error는 이후 배울 것
store_1 = YalcoChicken("강남")
store_2 = YalcoChicken("판교")
store_1_no = store_1._no
store_2_no_a = store_2.no
# 💡 오류를 발생시킴
# store_2.no = 3
# 속성에 직접 접근하여 바꾸는 것은 막지 못함
# store_2._no = 3
# store_2_no_c = store_2.no
pass
class Person:
def __init__(self, age):
self.age = age
@property
def korean_age(self):
return self.age + 1
@korean_age.setter
def korean_age(self, kr_age):
self.age = kr_age - 1
person_1 = Person(17)
per_1_age_a = person_1.age
per_1_kor_age_a = person_1.korean_age
person_1.korean_age = 20
per_1_age_b = person_1.age
per_1_kor_age_b = person_1.korean_age
pass
class Employee:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def name(self):
return self._name[0] + '모씨'
@property
def age(self):
return str(self._age - (self._age % 10)) + '대'
@age.setter
def age(self, age):
if isinstance(age, int) and age > 0:
self._age = age
def get_older(self, years):
self._age += years
emp_1 = Employee('김복동', 22)
emp_1_name = emp_1.name
emp_1_age_a = emp_1.age
emp_1.get_older(12)
emp_1_age_b = emp_1.age
emp_1.age = 0
emp_1_age_c = emp_1.age
pass
💡 컴퓨터 자원 절약에 활용