隨著我們不斷地在一個檔案中新增新的功能, 就會使得檔案變得很長。 即便使用了繼承,也抑制不住類的成長。為了解決這一問題,我們可以將類儲存在模組中, 然後在主程式中匯入所需的模組,這樣可以讓檔案儘可能保持整潔,從而實現更好的管理。
匯入類是一種很有效的程式設計方式。 這樣我們就可以把大部分邏輯儲存在獨立的檔案中,然後在主程式編寫高階邏輯咯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 *
複製程式碼
非必要,不使用這種匯入方式,因為:
- 通過檔案開頭定義良好的 import 語句, 我們就可以清楚地知道使用了哪些類。但這種匯入方式沒有提供這種好處。
- 如果不小心匯入了一個與本程式檔案中同名的類, 就會引發難以診斷的錯誤。
如果確實需要從一個模組中匯入很多類,那麼建議匯入整個模組, 然後使用 module_name.class_name
語法來呼叫它們。
5 在模組中匯入另一個模組
為了避免模組太大或者保證模組中的類都是相關的, 這時就需要將類分散到多個模組中。這樣, 可能一個模組中的類會依賴另一個模組中的類。這種場景下, 我們就會在一個模組中匯入另一個模組。因為匯入語法相同,所以在此就不贅述啦O(∩_∩)O~
建議一開始讓程式碼結構儘可能簡單。 即先儘可能在一個檔案中完成所有的工作, 確定一切都能滿足業務要求正確執行後,再將類移到獨立的模組中。