[Python] @classmethod와 @staticmethod의 차이

2022. 10. 20. 14:46TIL💡/Python

@classmethod

  • 클래스 메서드는 인스턴스 메서드가 인스턴스를 받는 것처럼 클래스를 첫 번째 인수로 수신한다.(cls)
  • 클래스 메서드는 C++, Java의 static method와 다르다. 다른 이유는 아래에 나온다.

@staticmethod

  • 메서드를 정적 메서드로 변환시켜준다.
  • 클래스 바디에 함수에 대한 참조가 필요하고, 인스턴스 메서드로 자동 변환하지 않는 경우에 사용

 

얼핏 봐서는 둘의 차이가 극명하지 않다.

둘은 상속이 일어날 때 확실히 차이가 있다.

 

class Person:
    default= "아빠"

     def __init__(self):
        self.data = self.default

    @classmethod
    def class_person(cls):
        return cls()

    @staticmethod
    def static_person():
        return Person()

class WhatPerson(Person):
    default = "엄마"
person1 = WhatPerson.class_person()    # return 엄마
person2 = WhatPerson.static_person()   # return 아빠

위와 같이 @staticmethod인 경우에 부모 클래스의 속성 값을 가져오지만, 

@classmethod의 경우에는 cls인자를 활용해 클래스의 클래스 속성을 가져온다. 

'TIL💡 > Python' 카테고리의 다른 글

[Python] 파이썬 웹서버 & Flask vs. FastAPI  (0) 2022.10.26