在 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}"
我正在重构我编写的一些代码以使用交互式 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}"