ホームページ >バックエンド開発 >Python チュートリアル >Python バージョン 3.9 以下でクラス本体内でクラス静的メソッドを呼び出す方法は?

Python バージョン 3.9 以下でクラス本体内でクラス静的メソッドを呼び出す方法は?

DDD
DDDオリジナル
2024-10-18 06:42:02697ブラウズ

How to Call Class Staticmethods within the Class Body in Python Versions <= 3.9?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。