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