說說在 Python 中如何匯入類

deniro發表於2019-04-05

說說在 Python 中如何匯入類

隨著我們不斷地在一個檔案中新增新的功能, 就會使得檔案變得很長。 即便使用了繼承,也抑制不住類的成長。為了解決這一問題,我們可以將類儲存在模組中, 然後在主程式中匯入所需的模組,這樣可以讓檔案儘可能保持整潔,從而實現更好的管理。

匯入類是一種很有效的程式設計方式。 這樣我們就可以把大部分邏輯儲存在獨立的檔案中,然後在主程式編寫高階邏輯咯O(∩_∩)O哈哈~

1 匯入一個類

假設有一個 User 類,檔名為 User.py,這個待匯入的檔案,一般稱為模組:

class User():
    '''賬號資訊'''

    def __init__(self, name, pwd):
        '''初始化'''
        self.name = name
        self.pwd = pwd
        # 登陸次數
        self.login_count = 0

    def print_login_count(self):
        '''列印登陸次數'''
        print('登陸次數=' + str(self.login_count))

    def update_login_count(self, num):
        '''更新登陸次數'''
        self.login_count = num

    def valid(self):
        '''是否驗證通過'''
        print(self.name + ' 驗證通過')
複製程式碼

我們再定義一個名為 deniro.py 的檔案,來匯入剛剛定義的 User 類:

from User import User


deniro = User('deniro', '1')
print('賬號名:' + deniro.name)
複製程式碼

執行結果:

賬號名:deniro

2 匯入一個模組多個類

可以根據需要,在同一個模組中定義任意數量的類,不過這些在同一個模組中的類最好是相關的。

我們在 User.py 中定義了一個 Privilege 類,並作為 User 類的屬性:

class User():
    '''賬號資訊'''

    def __init__(self, name, pwd):
        '''初始化'''
        self.name = name
        self.pwd = pwd
        # 登陸次數
        self.login_count = 0
        # 擁有的許可權
        self.privileges = Privilege(['修改某某賬號密碼', '禁用某某賬號'])

    def print_privileges(self):
        '''列印擁有的許可權'''
        print(self.privileges.contents)

...






class Privilege():
    '''許可權'''

    def __init__(self, contents):
        self.contents = contents
複製程式碼

然後在新的檔案中呼叫它:

# 匯入一個類
from User import User


deniro = User('deniro', '1')
print('擁有的許可權:' + str(deniro.privileges.contents))
複製程式碼

執行結果:

擁有的許可權:['修改某某賬號密碼', '禁用某某賬號']

3 匯入多個類

可以在一個模組中匯入多個類, 用逗號分隔這些需要匯入類。 匯入後, 就可以根據應用場景,來建立任意數量的類例項。

from User import User,Privilege

p=Privilege(["刪除賬號許可權"])
print('許可權內容:'+str(p.contents))
複製程式碼

執行結果:

許可權內容:['刪除賬號許可權']

4 匯入模組

我們還可以一次性匯入整個模組, 這需要使用句點表示法來呼叫相應的類:

import User

...

p=User.Privilege(["刪除賬號許可權"])
...
複製程式碼

4 匯入所有類

from User import *
複製程式碼

非必要,不使用這種匯入方式,因為:

  1. 通過檔案開頭定義良好的 import 語句, 我們就可以清楚地知道使用了哪些類。但這種匯入方式沒有提供這種好處。
  2. 如果不小心匯入了一個與本程式檔案中同名的類, 就會引發難以診斷的錯誤。

如果確實需要從一個模組中匯入很多類,那麼建議匯入整個模組, 然後使用 module_name.class_name 語法來呼叫它們。

5 在模組中匯入另一個模組

為了避免模組太大或者保證模組中的類都是相關的, 這時就需要將類分散到多個模組中。這樣, 可能一個模組中的類會依賴另一個模組中的類。這種場景下, 我們就會在一個模組中匯入另一個模組。因為匯入語法相同,所以在此就不贅述啦O(∩_∩)O~


建議一開始讓程式碼結構儘可能簡單。 即先儘可能在一個檔案中完成所有的工作, 確定一切都能滿足業務要求正確執行後,再將類移到獨立的模組中。

相關文章