Python/Django

[Django] Django Models 와 @property

yubi5050 2024. 6. 16. 13:18

@property

python에서는 @property라는 decorator를 제공하는데, 

 

해당 클래스의 객체 변수처럼 사용될 수 있게 하며, 캡슐화 목적으로 주로 사용된다.

 

property 코드 예시

class Profile:
    def __init__(self, first_name:str, last_name:str):
        self.first_name = first_name
        self.last_name = last_name

    @property
    def full_name(self):
        return self.first_name + self.last_name

profile = Profile("홍","길동")
print(profile.first_name) # "홍"
print(profile.last_name) # "길동"
print(profile.full_name) # "홍길동"

 

 

 

Django Models의 property

django models 에서도 @property를 사용 할 수 있으며, 사용시 해당 속성은 읽기 전용이 된다.

 

용도 : 읽기 전용이기 때문에 도메인에 대한 추가적인 비즈니스 로직을 위한 목적으로 사용하는 것도 적절!

 

흔히 말하는 getter/setter의 getter 와도 같은 역할을 한다.

class User:
	email = models.EmailField(verbose_name="이메일", max_length=265, unique=True)
    name = models.CharField(verbose_name="담당자 이름", max_length=10, blank=False)
    
    @property
	def service_name(self):
        # The user is identified by their email address
        return 'user_' + self.email

 

Django 에서의 setter 는?

+ setter는??) models 에서 setter 는 @<property>.setter 로 구현될 수 있지만

 

models (=데이터베이스 필드) 외의 속성을 설정할 필요가 없으므로 사용되지 않는 것이 일반적