クラスの本体内から静的メソッドを使用しようとすると、次の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):
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
これが発生する理由 (記述子バインディング) を理解して_stat_func()
おり、最後の使用後に手動で staticmethod に変換することで回避できます。
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」な方法はありますか?