class는 그냥 이름만 빌려준것이고 일종의 namespace로 함수를 구현하는 것이고
instance에서는 실행되지 않습니다.
아래와 같이 일종의 utility task들을 한쪽에 몰아넣고 쓸데나
class UTIL: @staticmethod def addtask(a,b): return a+b x = UTIL.addtask(1,4) # x = 5
또는 init구문으로들 많이 사용합니다.
init 구문이 복수개로 들어가는 경우, 일종의 편법으로 생성을 해서 자기자신을 리턴합니다.
아래가 좋은 예제입니다.
import time class Date(object): def __init__(self, year, month, day): self.year = year self.month = month self.day = day @staticmethod def now(): t = time.localtime() return Date(t.tm_year, t.tm_mon, t.tm_day) # example a = Date(2011,8,14) b = Date.now()
classmethod는 인자로 클래스 자기자신을 받게 되어있습니다. 관습적으로 cls라고 표기를 합니다.
그래서 instance에서 호출을 하면, class을 인자로 넘겨주게 됩니다.
class Times(object): factor = 1 @classmethod def mul(cls, x): return cls.factor*x class TwoTimes(Times): factor =2 x = TwoTimes.mul(4) # Calls Times.mul(TwoTimes, 4) --> 8
이둘은 데코레이터로 구현이 되어있습니다.
댓글 없음:
댓글 쓰기