クラスの本体内から静的メソッドを使用しようとすると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
私はこれがなぜ起こっているのか(記述子バインディング)を理解しており_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
一方、...