如何使用其完全限定名称调用 Python 方法?

How to invoke a Python method using its fully qualified name?

在 Java 中,我可以通过引用其完全限定名称来调用 class 或方法而不导入它:

public class Example {
    void example() {

        //Use BigDecimal without importing it
        new java.math.BigDecimal(1);
    }
}

类似的语法显然无法使用 Python:

class Example:
    def example(self):

        # Fails
        print(os.getcwd())

撇开良好做法和 PEP 建议,我可以在 Python 中做同样的事情吗?

我不确定你是否可以做完全相同的事情,但你可以只导入函数:

from foo.bar import baz as baz_fn

baz_fn()

其中 foo.bar 是包含该函数的模块的完全限定名称,baz 是您要导入的函数的名称。它将导入为名称 baz_fn.

没有。如果你想在 Python 中使用一个模块,你必须显式地将它的名字导入到作用域中。而且,正如@AlexHall 提到的,class/function/module 不存在 直到 导入时间。没有 import-ing 就无法访问它。然而,在我看来,这会产生更好、更明确的代码。这迫使您在导入模块名称时要明确。

一个函数在它的定义运行之前不存在,这意味着它所在的模块运行,这意味着该模块被导入(除非它是您直接 运行 的脚本)。

我能想到的最接近的是print(__import__('os').getcwd())

很晚了,但如果有人觉得它有用,我一直在使用:

def fqn_import(fqn: str):
    module_name, _, function_name = fqn.rpartition('.')
    return getattr(importlib.import_module(module_name), function_name)