【python 物件導向】 python物件學習筆記《1》

My_Vin發表於2018-03-11

模組和包

  模組 Module 就是一個簡單的python檔案,模組裡面可以定義各種類 class 和函式。
  import 語句用來匯入模組或者從模組裡面匯入特定的類或函式;也可以用 from…import 語句來匯入模組 module 下的一個類,
  例如:
  

import database                              
db = database.Database()  

  等價於:
  

from database import  Database()
db = Database()

  如果名字衝突,再匯入的時候可以自己改名字,使用 from … import…as 語句。
  如果要匯入一個模組下所有的類和函式,使用 from.. import * 語句,不過一般不要使用這種語法,這樣如果程式碼量一大,在尋找類的時候就會花去很多不必要的時間,也有另外的表達是“使得名稱空間混亂”。
  當我們的模組 module 越來越多不方便管理的時候,我們可以建立一個包 package 來放置內容主題相關聯的 模組(python檔案),包就是一個資料夾,但包括了一個名叫 _ init _.py的檔案(通常為空)。沒有這個檔案,python無法識別這個資料夾從而無法匯入模組。

絕對匯入和相對匯入

  絕對匯入 需要指明這個模組、函式的完整路徑。
  import語句使用點號 ‘.’ 來作為分隔符分隔 package 或者 module
  相對匯入 如果我們想匯入關於當前工作模組附近的模組,而又不想指明完整的絕對路徑,那麼就可以選擇相對匯入的方式
  例如我們當前工作的模組叫 a.py ,要呼叫當前包 package 裡的另一個模組 b.py 中的函式B:
  

from .b import B

  如果呼叫父包裡的c模組的C函式,那麼就要帶上兩個點:
  

from ..c import C

可以通過更多的點 . 來訪問層級更上的包。


  當匯入模組的時候,模組裡面的所有程式碼都會被立即執行,但如果模組裡面的是一個方法或者函式,會建立這個函式,但函式裡面的程式碼只有到函式被呼叫的時候才會執行。當我們正在執行某一個程式,而恰好想著從另一個模組匯入一個類(只想訪問),匯入的過程中被匯入的模組裡的程式碼被立即執行,這樣可能會使我們當前執行的程式碼程式終止掉。
   為了解決這個問題,我們應該總是把要啟動的程式碼放到一個函式裡面(通常叫main函式),並且當我們知道這是在執行指令碼的時候,才去執行這個main函式,而不是在其他指令碼匯入的時候。這裡我們要知道:
  

  • 每一個模組都有一個特殊的變數 __name__ , 在匯入這個模組的時候,__name__ 變數指明瞭模組的名字,當這個模組直接通過python 執行的時候,就不會匯入這個變數,而這時__name__變數就賦值給一個字串 “__main__” ,而不再是模組名字了。這段話再簡單通俗的來說:
      
       if__name__ == '__main__'的意思是:當.py檔案被直接執行時,if __name__ == '__main__'之下的程式碼塊將被執行;當.py檔案以模組形式被匯入時,if __name__ == '__main__'之下的程式碼塊不被執行.
      
       這樣你把所有的程式碼都包在if __name__ == '__main__',就不用擔心呼叫的時候把自己當前的程式中斷了

參考 : 如何簡單地理解Python中的if name == ‘main


相關文章