-
[이 문법 뭐임;] @staticmethod 엄밀하지 않고 쉬운 설명Python 2021. 11. 17. 18:15
github로 다른 사람들 코드 보다보면 class에 @staticmethod로 감싼 것을 종종 확인할 수 있죠?
' 어차피 그래봤자 class 안에 있는 메소드니까, 비슷한 역할의 적당한 함수같긴 한데... '
라는 생각이 들긴 하지만
혹시 내가 놓치는게 있진 않을까 해서 꽤나 찝찝합니다.
python official page(https://docs.python.org/3/library/functions.html#staticmethod)에서 확인해보면,
@staticmethod는 class의 method를 static하게 만들어준다고 합니다.
아주 당연한 소리 하면서 열받게 하네요.
쉽게 말씀드리면,
@staticmethod로 감싼 method는 그냥 함수입니다.
함수 중에서도 "그냥" 함수입니다.
그냥 함수는 class 밖에서 def로 선언합니다. 클래스 안의 method와는 어떻게 다른가요?
- 첫 번째 인자는 무조건 자기 자신 인스턴스를 가리키며 통상 self로 사용한다.
- 이 self를 통해 instance 변수와 class 변수에도 접근할 수 있다.
- 그런데 그냥 함수는 (당연하게도 어떤 class에 속해있지 않기 때문에) 이런 self가 없다.
그런데 staticmethod로 선언된 함수를 한번 보시면, 첫 번째 인자가 self를 가리키지 않고, 함수 기능 안에서도 자기 자신 인스턴스의 변수에 접근하지 않는다는 것을 확인하실 수 있습니다.
그래서 @staticmethod로 감싸진 method는
(class 밖에서 선언된) def 함수와 같지만, 클래스에 속해 있으므로,
<class이름>.~~~ 혹은 <instance이름>.~~~로 접근한다.라고 생각하시면 됩니다.
영상 설명은
https://www.youtube.com/watch?v=tEJHs2PaQG8
를 참고하셔도 좋습니다.
@staticmethod는 @classmethod와 더불어서 상속과 함께할 때 좀 더 복잡해지고 더 유용하게 사용할 수 있는데, 이에 대해서는 staticmethod에 대한 엄밀한 정보를 담은 posting에서 다루겠습니다.
'Python' 카테고리의 다른 글
[python] zip, enumerate: 영상으로 설명 (0) 2022.08.03 코딩 테스트 - 재귀함수의 함정(+영상 설명) (0) 2022.08.03 [python] 파일 목록 얻는 방법 - 영상 설명 (glob / os.walk) (0) 2022.04.09 [python] **kwargs가 뭐지? 영상으로 설명 (0) 2022.03.27 엑셀 파일들 내맘대로 병합하는 법(영상)[엑셀에 엑셀달기] (0) 2022.03.27