[Python] 파이썬의 클래스 메소드, @staticmethod

파이썬의 데코레이터(decorator)문법은 흔히 찾아보기 힘든 문법인데 (거의 프레임워크들에서나 볼 수 있음) 클래스를 만들다보면 요긴하게 쓰이는 부분이 있다. (혹은 책 같은데서 찾아보게 될지도…)

class Post:
    def __init__(self):
        pass

    @staticmethod
    def postFromStructs(structs):
        if type(structs) == list:
            result = []
            for elem in structs:
                a = Post()
                for key in a.keys:
                    setattr(a, key, elem[key])
                result.append(a)
            if len(result) > 1:
                return result
            else:
                return result[0]
        else:
            result = Post()
            for key in structs:
                setattr(result, key, structs[key])
            return result

위 코드에서 @staticmethod라는 데코레이터를 사용했는데, staticmethod는 클래스 내에 정의된 함수에 대해 클래스에서 바로 호출할 수 있는 (일반적으로 클래스 내에서 정의된 함수는 클래스의 인스턴스를 만들어서 호출해야 한다.) 클래스 메소드로 만들어준다.

또한, 이런 클래스 메소드에서는 클래스 자신의 인스턴스를 생성할 수 있으므로, 일종의 팩토리 메소드를 작성하는 것을 아주 많이 쉽게 만들어 준다.

MetaWeblog API Wrapper를 작성하면서 쓰는 일이 생겨서 기록할 겸 포스팅.