[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를 작성하면서 쓰는 일이 생겨서 기록할 겸 포스팅.