2011년 8월 15일 월요일

파이썬 클래스 staticmethod vs classmethod

staticmethod는 C++의 의 그것과 동일합니다.

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


이둘은 데코레이터로 구현이 되어있습니다.

댓글 없음:

댓글 쓰기