2017-08-30 182 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,沒有辦法訪問它。然而在我看來,這使得代碼更好更明確。這會強制您在導入模塊名稱時顯式。

相關問題