2017-08-30 190 views
5

在Java中我可以调用类或方法,无需通过引用它的完全合格的名称将其导入:如何使用其完全限定名称调用Python方法?

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中做同样的事吗?

+1

不,你不能调用一个类或方法而不导入它 - 为什么你想避免导入?你可以在你的函数本地导入它,它只是将你的java 1-liner变成Python中的2-liner。这是你唯一想要避免的事情吗? – mgilson

+0

我喜欢单行游戏,因为我正在玩一些基于AST的代码注入,我想尽可能少地修改原始模块 – noamt

回答

2

函数直到定义运行时才存在,意味着它运行的模块,意味着模块已导入(除非它是您直接运行的脚本)。

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

+0

在这种情况下,看起来'__import()__'完美无缺 – noamt

+1

@noamt其实,你真的不应该使用'__import__'。如果你想要类似的东西,可以使用'importlib.import_module'。 –

+0

'__import__'或'importlib'处理完全合格的路径,其中有类名吗?例如'module.OuterClass.InnerClass.some_classmethod'? – mgilson

1

我不知道,你可以做完全一样的,但你可以只导入功能:

from foo.bar import baz as baz_fn 

baz_fn() 

其中foo.bar是包含的功能和baz模块的全名是您希望导入的功能的名称。它会将其作为名称baz_fn导入。

2

不可以。如果您想在Python中使用模块,则必须将其名称显式导入到范围中。而且,正如@AlexHall提到的,一个类/函数/模块不存在,直到导入时间。没有import -ing,没有办法访问它。然而在我看来,这使得代码更好更明确。这会强制您在导入模块名称时显式。

相关问题