[Python] @classmethod와 @staticmethod의 차이
2022. 10. 20. 14:46ㆍTIL💡/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 |
---|