파이썬(Python)/문법

파이썬 @staticmethod 란? (예제로 이해하기, 골뱅이마크 의미)

끄적끄적아무거나 2021. 7. 1. 08:23
반응형

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'

 

반응형