클래스 본문 내에서 정적 메소드를 사용하려고 할 때 내장 staticmethod
함수를 장식 자로 사용하여 정적 메소드를 다음과 같이 정의하십시오 .
class Klass(object):
@staticmethod # use as decorator
def _stat_func():
return 42
_ANS = _stat_func() # call the staticmethod
def method(self):
ret = Klass._stat_func() + Klass._ANS
return ret
다음과 같은 오류가 발생합니다.
Traceback (most recent call last):<br>
File "call_staticmethod.py", line 1, in <module>
class Klass(object):
File "call_staticmethod.py", line 7, in Klass
_ANS = _stat_func()
TypeError: 'staticmethod' object is not callable
왜 이런 일이 발생하는지 이해하고 (descriptor binding)_stat_func()
마지막 사용 후 정적 메소드 로 수동으로 변환 하여 해결할 수 있습니다 .
class Klass(object):
def _stat_func():
return 42
_ANS = _stat_func() # use the non-staticmethod version
_stat_func = staticmethod(_stat_func) # convert function to a static method
def method(self):
ret = Klass._stat_func() + Klass._ANS
return ret
그래서 내 질문은 :
더 깨끗하거나 더 많은 "Pythonic"에서와 같이 더 나은 방법이 있습니까?
staticmethod
것입니다. 일반적으로 모듈 수준 함수로 더 유용합니다.이 경우 문제는 문제가되지 않습니다.classmethod
, 반면에 ...