대충이라도 하자

Python static method VS class method 본문

꼬꼬마 개발자 노트/Python

Python static method VS class method

Sueeeeee
반응형

파이썬에서 메소드는 세 가지 종류이다.

- instance method

- class method

- static method

 

파이썬에서 사용되는

@classmethod 와 @staticmethod는 어떻게 다른 걸까???

-->

두 개가 서로 비슷하지만, 사용 방법이 조금 다르다.

클래스 메소드의 경우에는 클래스 객체가 첫번째 파라미터로 필요하지만, 스테틱 메소드의 경우에는 파라미터를 가지지 못한다.

 

*** stackoverflow 참고

class Date(object):
    
    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

    @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

date2 = Date.from_string('11-09-2012')
is_date = Date.is_date_valid('11-09-2012')

위처럼 클래스 메소드는 cls라는 파라미터로 클래스 내에서 정의된 변수들을 사용 가능하다.

하지만 스테틱 메소드는 클래스와는 관련 없이 클래스 내의 변수들을 사용하지 않고 새롭게 정의된다.

 

다른 클래스에서 이 클래스 메소드를 사용하기 위해서는 인스턴스를 선언한 뒤, 이 인스턴스로 사용할 수 있지만

스테틱 메소드는 인스턴스 선언 필요 없이, 그냥 바로 사용이 가능하다.

static method는 개체와 독립적이지만, 로직상 클래스 내에 포함되는 메소드이다.

또한, 

""

This is a more subtle way of creating a Static method as we do not have to rely on a statement definition of a method being a class method and making it static at each place you make it static.

""

 

또한, 인스턴스 메소드에서는 self라는 파라미터를 사용하지만 클래스 메소드에서는 cls 라는 파라미터를 사용한다는 점도 기억해둘 것

static 메소드는 속성에 접근할 수 없기 때문에 사용하는 키워드가 없다.

속성에 접근하기 위한 방법이며, 메소드 종류에 따라 self냐 cls냐가 갈린다.

반응형
Comments