내장함수 - classmethod(function)

2015. 7. 16. 12:17IT관련

반응형

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

http://stackoverflow.com/questions/136097/what-is-the-difference-between-staticmethod-and-classmethod-in-python


일반적인 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')


반응형