2015. 7. 16. 12:17ㆍIT관련
https://docs.python.org/2/library/functions.html#classmethod
classmethod(function)
Param function에 해당하는 클래스 메소드(class method)를 리턴한다.
@classmethod와 @staticmethod가 무엇인지 확인해 보자.
http://stackoverflow.com/questions/12179271/python-classmethod-and-staticmethod-for-beginner
일반적인 method는 아래와 같이 self를 반드시 첫 번째 param으로 받아야 하며 호출하기 위해서는 인스턴스 생성 후 그 인스턴스의 메소르를 호출하는 형식을 취한다.
class A(object):
def foo(self,x):
print "executing foo(%s,%s)"%(self,x)
a = A()
a.foo(1)
# executing foo(<__main__.A object at 0xb7dbef0c>,1)
Classmethod는 __init__(self[, args...])가 유사한건인데, self를 param으로 받지 않고 cls라는 것을 첫번째 param으로 받는다.
cls는 아직 인스턴스화 되지 않은 객체이며 일반적으로 classmethod 내에서 인스턴스화 하여 리턴하는데 사용한다.
class Date(object):
day = 0
month = 0
year = 0
def __init__(self, day=0, month=0, year=0):
self.day = day
self.month = month
self.year = year
@classmethod
def from_string(cls, date_as_string):
day, month, year = map(int, date_as_string.split('-'))
date1 = cls(day, month, year)
return date1
date2 = Date.from_string('11-09-2012')
Staticmethod는 classmethod와 유사한데, cls를 파라미터로 받지 않는다. 즉,인스턴스 생성 같은 것은 하지 않는 메소드라고 보면 된다.
@staticmethod
def is_date_valid(date_as_string):
day, month, year = map(int, date_as_string.split('-'))
return day <= 31 and month <= 12 and year <= 3999
# usage:
is_date = Date.is_date_valid('11-09-2012')
'IT관련' 카테고리의 다른 글
내장함수 - compile(source, filename, mode[, flags[, dont_inherit]]) (0) | 2015.07.16 |
---|---|
내장함수 - cmp(x, y) (0) | 2015.07.16 |
내장함수 - chr(i) (0) | 2015.07.16 |
내장함수 - callable(object) (0) | 2015.07.16 |
내장함수 - bytearray([source[, encoding[, errors]]]) (0) | 2015.07.16 |