[英]Sharing code between python files
可以說我有以下文件:
-- classes.py
-- main.py
-- commands.py
-- output.py
main.py
是主文件,它使用來自classes
, commands
和output
的代碼。 commands
將classes
定義的對象作為功能輸入,並訪問這些對象的方法/屬性。 commands
和classes
使用output
定義的函數。
問題:我是否需要在依賴於它們的每個文件中導入每個模塊? 即:我是否需要同時在classes
, commands
和main
導入output
? 還是將classes
, output
和commands
都導入main
的事實意味着它們不需要單獨導入?
處理具有相互依賴性的多個文件的最佳實踐是什么?
問題:我是否需要在依賴於它們的每個文件中導入每個模塊? 即:是否需要同時在類,命令和main中導入輸出?
是的,這是要走的路。
還是將類,輸出和命令全部導入主要的事實意味着它們不需要單獨導入?
沒有。
Python文件是模塊。 python模塊具有一個符號表。 該表中指定的每個函數,類和變量都在此表中。 一個模塊只能使用此表中的內容以及Python內置函數。
因此,例如classes.py
:
def function(): pass
class Class(object): pass
有符號表:
{
'function': function,
'Class': Class
}
您只能在classes.py
使用function
和Class
(加上提到的內置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.