TIL#173 django model decorator

Dasom·2024년 4월 23일
0

Django

목록 보기
34/34

@property

메소드를 속성처럼 접근할 수 있게 해준다. 해당 메소드를 호출할 때 ()를 붙이지 않고도 속성처럼 사용할 수 있다.
주로 속성 값을 정의, 동적으로 계산하거나 속성에 접근할 때 사용한다.

@classmethod

클래스 메소드를 정의할 때 사용한다. 클래스 전체에 영향을 주는 동작을 정의할 때 유용하다. 첫번째 인자로 클래스 자체를 받는 cls 인자를 받으며 보통 cls를 이용해 클래스 레벨의 속성이나 다른 클래스 메소드에 접근한다.

class Calc:
	@classmethod
    def add(cls, a, b):
    	return a + b

cal = Calc()
cal.add(2, 4)   # return 6

@staticmethod

정적 메소드를 정의할 때 사용한다. 클래스나 인스턴스와 무관하게 동작하는 메소드이다. 클래스나 인스턴스의 상태를 변경하지 않고 단순히 로직을 수행할 때 사용한다.

class Calc:
	@staticmethod
    def add(a, b):
    	return a + b

cal = Calc()
cal.add(2, 4)   # return 6

@classmethod / @staticmethod

두 메소드는 상속에서 다르다. @classmethod의 경우에는 cls 인자를 활용하여 현재 클래스의 속성을가져오지만 @staticmethod 의 경우에는 부모 클래스의 클래스 속성 값을 가져온다.

class Fruit:
	default = 'apple'
    
    def __init__(self):
    	self.data = self.default
        
    @classmethod
    def class_fruit(cls):
    	return cls()
    
    @staticmethod
    def static_fruit():
    	return Fruit()
        

class WhatFruit(Fruit):
	default = 'melon'
    

fruit1 = WhatFruit.class_fruit()  # return 'melon'
fruit2 = WhatFruit.static_fruit()  # return 'apple'
profile
개발자꿈나무🌲

0개의 댓글