Python Version <= 3.9: Calling Class Staticmethod Within the Class Body
Problem:
When attempting to call a static method from within the class body using the staticmethod decorator, staticmethod objects are found not to be callable, resulting in a TypeError. This behavior occurs due to descriptor binding.
Workaround:
One workaround is to manually convert the static method into a static method after its last use:
<code class="python">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
Cleaner Pythonic Method:
For Python versions <= 3.9, one can utilize the __func__ attribute of staticmethod objects to call the raw function:
<code class="python">class Klass(object): @staticmethod # Use as decorator def stat_func(): return 42 _ANS = stat_func.__func__() # Call the staticmethod def method(self): ret = Klass.stat_func() return ret
For Python Versions >= 3.10:
In Python versions 3.10 and above, staticmethod functions can be called directly from within the class scope without any issues.
以上がPython バージョン 3.9 以下でクラス本体内でクラス静的メソッドを呼び出す方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。