在 python 中从自身内部确定静态方法限定名称

Determine static method qualified name from within itself in python

我正在重构我编写的一些代码以使用交互式 TUI,我希望使用我的 class 结构来创建命令而不是显式输入字符串。使用 __qualname__ 会非常方便,但我找不到从函数中调用它的等效方法?

# Example:
class file:
    class export:
        @staticmethod
        def ascii(output_path):
            return f"/file/export/ascii/ {output_path}"

# Desired
import inspect
class file:
    class export:
        @staticmethod
        def ascii(output_path):
            qualname= inspect.currentframe().f_code.co_qualname  # <-- co_qualname is not implemented
            return f"/{qualname.replace(".", "/")}/ {output_path}"

我是从 that inspect.currentframe().f_code.co_name will only return 'ascii' and co_qual_name has not been implemented yet per and https://bugs.python.org/issue13672?

了解到的

有什么方法可以从 ascii() 静态方法本身获取 file.export.ascii 吗?装饰器或其他设计模式也是一种选择,但遗憾的是我有数百个这样的静态方法。

您可以通过将 ascii 设为 class 方法而不是静态方法来获得您想要的结果。您仍然以相同的方式调用它,但是您有一种从方法内部访问方法本身的方法。

class file:
    class export:
        @classmethod
        def ascii(cls, output_path):
            return f"{cls.ascii.__qualname__}/{output_path}"