簡體   English   中英

在python文件之間共享代碼

[英]Sharing code between python files

可以說我有以下文件:

-- classes.py
-- main.py
-- commands.py
-- output.py

main.py是主文件,它使用來自classescommandsoutput的代碼。 commandsclasses定義的對象作為功能輸入,並訪問這些對象的方法/屬性。 commandsclasses使用output定義的函數。

問題:我是否需要在依賴於它們的每個文件中導入每個模塊? 即:我是否需要同時在classescommandsmain導入output 還是將classesoutputcommands都導入main的事實意味着它們不需要單獨導入?

處理具有相互依賴性的多個文件的最佳實踐是什么?

問題:我是否需要在依賴於它們的每個文件中導入每個模塊? 即:是否需要同時在類,命令和main中導入輸出?

是的,這是要走的路。

還是將類,輸出和命令全部導入主要的事實意味着它們不需要單獨導入?

沒有。

Python文件是模塊。 python模塊具有一個符號表。 該表中指定的每個函數,類和變量都在此表中。 一個模塊只能使用此表中的內容以及Python內置函數。

因此,例如classes.py

def function(): pass
class Class(object): pass

有符號表:

{
    'function': function,
    'Class': Class
}

您只能在classes.py使用functionClass (加上提到的內置function )。 您不能隱式訪問此模塊之外的任何內容,Python沒有像C#和Java一樣具有名稱空間的任何概念。 如果需要其他文件(模塊)中的任何內容,則必須顯式導入。

現在,當您“導入”時真正發生了什么?

很簡單的事情-導入的模塊“成為”模塊本身的一部分!

在下一個示例中,我們有output.py

def output_function(): pass

與符號表:

{
    'output_function': output_function
}

classes.py

import output
from output import output_function

def function(): pass
class Class(object): pass

與符號表:

{
    'Class': Class,
    'function': function,
    'output': {
        'output_function': output_function
    }
    'output_function': output_function
}

其中“輸出”的值實際上是“輸出”(同一對象)的符號表!

您甚至可以在其他模塊中進行操作:

import classes

classes.output.output_function()

但是不要 ,請明確說明您的進口商品。

聽起來可能有點怪異,但這就是Python的工作方式。 請注意,還涉及更多事情,例如,當您首次導入模塊時,等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM