@classmethod 와 @staticmethod에 대해

본 페이지에서는 Python의 @classmethod, @staticmethod 에 대한 차이와 실제 예시를 통해 어떤식의 차이가 있는지 기술한다.

@classmethod 란?

@staticmethod 란?

실제 예시

@classmethod 예시

class TypeBase(BaseModel):
    """ TypeBase는 모든 이벤트 클래스가 상속하는 클래스
    Pydantic을 통해, 필요 기능들을 사용할 수 있도록 작업하였다.
    """

    def __init__(self, **data):
        super().__init__(**data)

    # (중략)

    @classmethod
    def get_types(cls):
        """ 이벤트 클래스의 모든 필드에 대해 {변수명: 타입} 으로 리턴한다.
        """
        return {
            field.name: field.type_ for field in cls.__fields__.values()
        }

    @classmethod
    def get_searchables(cls):
        """ 검색 가능한 필드에 대해 {변수명: 타입} 으로 리턴한다.
        """
        return {
            idx.name: idx.type_ for idx in
            (field for field in cls.__fields__.values() if
              field.name in cls.Config.searchables)
        }

    @classmethod
    def get_result_fields(cls):
        """ 리턴값으로 제공가능한 필드에 대해 {변수명: 타입} 으로 리턴한다.
        """
        return {
            idx.name: idx.type_ for idx in
            (field for field in cls.__fields__.values() if
              field.name in cls.Config.results)
        }

@staticmethod 예시