새소식

ETC

@staticmethod 데코레이터

  • -
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

'ETC' 카테고리의 다른 글

[Python] 매개 변수 & 변수 범위  (0) 2022.06.24
[Python] argparse  (0) 2022.06.22
[Python] 자료형  (0) 2022.06.21
@데코레이터  (0) 2022.04.15
Nested Function / First-class Function / Closure Function  (0) 2022.04.14
Contents