python物件導向學習筆記八 模組和包

2021-10-10 08:23:54 字數 3771 閱讀 3096

每乙個以副檔名.py結尾的源**檔案都是乙個模組。

模組名同樣也是乙個識別符號,需要符合識別符號的命名規則:由數字、字母和下劃線組成,而且開頭不能是數字。

模組就好比是工具包,模組中定義的全域性變數、函式、類,都是提供外界使用的工具。

要想使用模組中的工具,首先要匯入這個模組。

有兩種方式:import匯入、from…import匯入

(1)import 匯入。會一次性把模組中的所有工具全部匯入;匯入之後,通過模組名.使用模組中的工具----全域性變數、類、函式。

注意:每個匯入應該獨佔一行。

import 模組名1

import 模組名2

例子:xb_01,xb_02 均為編寫好的.py程式

xb_01.py:

# 全域性變數

title =

"模組1"

# 函式

def say_hello()

:print

("我是 %s"

% title)

# 類class dog

(object)

: pass

xb_02.py:

# 全域性變數

title =

"模組2"

# 函式

def say_hello()

:print

("我是 %s"

% title)

# 類class cat

(object)

: pass

在主程式中呼叫這兩個模組:

import xb_01

import xb_02

xb_01.

say_hello()

xb_02.

say_hello()

dog = xb_01.

dog(

)print

(dog)

cat = xb_02.

cat(

)print

(cat)

輸出:我是 模組1

我是 模組2

>

>

注意:如果模組的名字太長,可以使用as指定模組的別名。模組的別名應該符合大駝峰命名法(每個單詞的首字母大寫,單詞之間沒有下劃線)。

import 模組名1 as 模組別名
例子:

import xb_01 as dogmoudle

import xb_02 as catmoudle

dogmoudle.

say_hello()

catmoudle.

say_hello

()

(2)from…import 匯入。從乙個模組中,匯入部分工具。匯入後,不需要通過模組名.,可以 直接使用模組中的工具–全域性變數、函式、類。

from 模組名1 import 工具名
例子:

from xb_01 import dog

from xb_02 import say_hello

dog =

dog(

)print

(dog)

say_hello

()

注意:

如果兩個模組,存在同名函式,那麼後匯入模組的函式,會覆蓋掉先導入的函式。一旦發生衝突,可以使用 as 給其中乙個工具起別名。

from xb_01 import say_hello

from xb_02 import say_hello as module2_say_hello

say_hello()

module2_say_hello

()

from 模組名1 from *
直譯器在匯入模組時,會首先搜尋當前目錄,沒有找到再去搜尋系統目錄。所以,給檔案起名時,不要和系統的模組檔案重名。

問題:在匯入檔案時,檔案中的所有沒有縮排的**都會被執行一遍!但是,開發人員通常會在模組的下方增加一些測試**希望僅在模組內使用,而被匯入到其他模組中不需要執行。

解決:採用__name__判斷,把測試**放到判斷句的下面。這樣,測試**只有在執行該程式時會被執行,在匯入到其他程式中的時候,測試**並不會被執行。

原理:__name__是乙個內建屬性,記錄著乙個字串。如果是當前執行的程式,__name__就是__main__的;如果是被其他檔案匯入的,__name__就是模組名。

例子:在模組中,

def say_hello()

:print

("我是 hello"

)if __name__ ==

"__main__"

:say_hello

()

因此,為保證**的可讀性,方便被匯入到其他檔案,正確的程式格式應該如下所示:

# 匯入模組

# 定義全域性變數

# 定義類

# 定義函式

# 在**的最下方

def main()

: pass

# 根據 __name__判斷是否執行下方**

if __name ==

"__main__"

:main

()

是乙個包含多個模組的目錄。

目錄下有乙個特殊的檔案__ init__.py

包名的命名方式和變數名一致,包含小寫字母、數字、下劃線(不以數字開頭) 。

好處:使用import 包名可以一次性匯入包中所有的模組。

例子:(1)建立乙個包xb_message:

方式一:新建目錄(directory),在該目錄中手動新建乙個空白的__init__的py檔案。

方式二:直接新建 python package。會自動生成乙個空白的__init__檔案。

(2)新建兩個檔案,send_message和receive_message檔案。在第乙個檔案定義send函式,第二個檔案定義receive函式。

def send

(text)

:print

("正在傳送%s..."

% text)

def receive()

:return

"這是來自10086的簡訊"

(3)配置__init__檔案:指定對外界提供的模組列表

from . import send_message

from . import receive_message

(4)在外界呼叫包。

import xb_message     # 匯入包

xb_message.send_message.

send

("三號高地,收到請回答!"

) # 包名.模組名.函式名

txt = xb_message.receive_message.

receive()

print

(txt)

Python學習筆記 物件導向

物件導向 oop 基本概念 物件導向程式設計 object oriented programming簡寫 oop 1 物件導向基本概念 之前的學習程式設計方式就是面向過程的 面向過程和物件導向,是兩種不同的程式設計方式 對比面向過程的特點,可以更好的了解什麼是物件導向 2 過程和函式 科普 過程是最...

python 物件導向 多型(八)

案例 人有中國人,英國人,他們都要講話 父類class person metaclass abc.abcmeta abc.abstractmethod裝飾器後嚴格控制子類必須實現這個方法 指定是抽象方法 abc.abstractmethod def talk self pass 子類class ch...

物件導向程式設計 python 學習筆記

物件導向程式設計 object oriented programming,簡稱oop,是一種程式設計思想。oop把物件作為程式的基本單元,乙個物件包含了資料和運算元據的函式。面向過程的程式設計把電腦程式視為一系列的命令集合,即一組函式的順序執行。為了簡化程式設計,面向過程把函式繼續切分為子函式,即把...