staticmethod란?
staticmethod 는 Class 안에서 보통 정의 된다. 그리고 앞에 골뱅이 (at) 마크와 함께 표기 한다. Class에 대한 내용을 알고 싶다면 괄호안의 링크를 참조하길 바란다. (https://scribblinganything.tistory.com/203)
그리고 골뱅이 마크 (앳 마크)가 의미하는 것을 알고 싶다면 옆에 괄호안의 링크를 참조하길 바란다. (https://scribblinganything.tistory.com/160)
간단히 골뱅이 마크의 의미를 설명하자면 골뱅이 마크 옆에 쓰인 함수가 그 밑에 정의된 함수를 인자로 가져다가 쓰는 것이다. 여기서 staticmethod는 파이썬에서 제공하는 함수로 생각하면 된다. 기능은 간단하게 말하자면 staticmethod 아래 정의된 함수를 클래스에 대한 객체(object) 작업을 거치지 않고 클래스 외부에서 사용할 수 있게 해주는 것이다. 마치 전역 변수와 같이 동작하는 것이다.
아래 예제를 통해 쉽게 이해 하도록 해보자
예제로 이해하기
코드>>
class family:
def __init__(self, father, mother, son, daughter):
self.fa = father
self.mo = mother
self.so = son
self.da = daughter
def how_many_fam(self):
print("We have ", self.fa+self.mo+self.so+self.da, " family members" )
@staticmethod
def how_many_relative(uncle, aunt):
print("We have ", uncle,"uncles and ", aunt,"aunts" )
A_family = family(1,1,1,2)
A_family.how_many_fam()
A_family.how_many_relative(1,2)
print("####################")
family.how_many_relative(3,4)
결과>>
We have 5 family members
We have 1 uncles and 2 aunts
####################
We have 3 uncles and 4 aunts
주석>>
코드에서 A_family 라고 객체화 하고 사용하였을 때 Class 내부 함수를 문제 없이 사용할 수 있다.
그리고 family 라는 Class를 직접 바로 사용하여 staticmethod에 정의된 함수를 사용하였는데도 문제 없었다.
이처럼 전역에서 이용할 수 있게 변경해준 것이다.
그리고 staticmethod 아래 함수를 정의할 때 주의 할 점은 객체화 과정이 필요 없으므로
"self" 인자를 넣을 필요가 없다.
라는 점이 중요하다.
만일 self를 넣게 되면 아래와 같은 에러 메세지가 발생한다.
Traceback (most recent call last):
File "c:\Users\forgo\Documents\python_ex\test00\test.py", line 16, in <module>
A_family.how_many_relative(1,2)
TypeError: how_many_relative() missing 1 required positional argument: 'aunt'
'파이썬(Python) > 문법' 카테고리의 다른 글
파이썬 문장(string)을 왼쪽, 오른쪽 끝에 배치하고 싶을 때 (":>" 와 ":<"의 의미, 여백 넣기) (0) | 2021.08.05 |
---|---|
파이썬 List 최대, 최소 값 차이 구하기 (feat. 파이썬 동작 시간 측정으로 가장 빠르게 구하는 방법은?) (0) | 2021.07.22 |
파이썬 Class 상속(Inheritance)란? (예제로 알아보기) (0) | 2021.06.30 |
파이썬 폴더위치에 따른 import 방법 (상위,하위,동일 폴더 위치)을 예제로 이해하기 (0) | 2021.05.22 |
파이썬 *args, **kwargs 의미와 예제를 통해 이해하기 (0) | 2021.04.24 |