ETC

@staticmethod 데코레이터

StoneSeller 2022. 7. 1. 14:53
class Test:
    def a(self):
        pass
    
    @staticmethod
    def b():
    	pass

 

클래스를 생성하지 않고 바깥에서 직접 호출했을 때 a( ), b( )의 타입은 모두 <function>이다.

 

>>> type(CLASS.a), type(CLASS.b)
(<class 'function'>, <class 'function'>)

 

클래스를 생성한 후에 타입을 확인해보면 클래스 내의 함수는 <method>가 된다.

그러나 @staticmethod로 선언한 함수는 여전히 함수임을 확인할 수 있다.

>>> cls = CLASS()
>>> type(cls.a), type(cls.b)
(<class 'method'>, <class 'function'>)

 

즉, @staticmethod로 선언한 함수는 클래스의 메소드가 아니라 여전히 독립된 함수임을 알 수 있다.

사실상 클래스 바깥에 함수를 별도 선언한 것과 같다.

 

@staticmethod는 self를 받지 않으므로 인스턴스 속성에는 접근할 수 없다. 그래서 보통  인스턴스 속성, 인스턴스 메서드가 필요 없을 때 사용한다.

728x90