Python中如何導(dǎo)入類(lèi)示例詳解
前言
隨著我們不斷地在一個(gè)文件中添加新的功能, 就會(huì)使得文件變得很長(zhǎng)。 即便使用了繼承,也抑制不住類(lèi)的成長(zhǎng)。為了解決這一問(wèn)題,我們可以將類(lèi)存儲(chǔ)在模塊中, 然后在主程序中導(dǎo)入所需的模塊,這樣可以讓文件盡可能保持整潔,從而實(shí)現(xiàn)更好的管理。
導(dǎo)入類(lèi)是一種很有效的編程方式。 這樣我們就可以把大部分邏輯存儲(chǔ)在獨(dú)立的文件中,然后在主程序編寫(xiě)高級(jí)邏輯咯O(∩_∩)O哈哈~
1 導(dǎo)入一個(gè)類(lèi)
假設(shè)有一個(gè) User 類(lèi),文件名為 User.py,這個(gè)待導(dǎo)入的文件,一般稱(chēng)為模塊:
class User(): '''賬號(hào)信息''' def __init__(self, name, pwd): '''初始化''' self.name = name self.pwd = pwd # 登陸次數(shù) self.login_count = 0 def print_login_count(self): '''打印登陸次數(shù)''' print('登陸次數(shù)=' + str(self.login_count)) def update_login_count(self, num): '''更新登陸次數(shù)''' self.login_count = num def valid(self): '''是否驗(yàn)證通過(guò)''' print(self.name + ' 驗(yàn)證通過(guò)')
我們?cè)俣x一個(gè)名為 deniro.py 的文件,來(lái)導(dǎo)入剛剛定義的 User 類(lèi):
from User import User deniro = User('deniro', '1') print('賬號(hào)名:' + deniro.name)
運(yùn)行結(jié)果:
賬號(hào)名:deniro
2 導(dǎo)入一個(gè)模塊多個(gè)類(lèi)
可以根據(jù)需要,在同一個(gè)模塊中定義任意數(shù)量的類(lèi),不過(guò)這些在同一個(gè)模塊中的類(lèi)最好是相關(guān)的。
我們?cè)?User.py 中定義了一個(gè) Privilege 類(lèi),并作為 User 類(lèi)的屬性:
class User(): '''賬號(hào)信息''' def __init__(self, name, pwd): '''初始化''' self.name = name self.pwd = pwd # 登陸次數(shù) self.login_count = 0 # 擁有的權(quán)限 self.privileges = Privilege(['修改某某賬號(hào)密碼', '禁用某某賬號(hào)']) def print_privileges(self): '''打印擁有的權(quán)限''' print(self.privileges.contents) ... class Privilege(): '''權(quán)限''' def __init__(self, contents): self.contents = contents
然后在新的文件中調(diào)用它:
# 導(dǎo)入一個(gè)類(lèi) from User import User deniro = User('deniro', '1') print('擁有的權(quán)限:' + str(deniro.privileges.contents))
運(yùn)行結(jié)果:
擁有的權(quán)限:['修改某某賬號(hào)密碼', '禁用某某賬號(hào)']
3 導(dǎo)入多個(gè)類(lèi)
可以在一個(gè)模塊中導(dǎo)入多個(gè)類(lèi), 用逗號(hào)分隔這些需要導(dǎo)入類(lèi)。 導(dǎo)入后, 就可以根據(jù)應(yīng)用場(chǎng)景,來(lái)創(chuàng)建任意數(shù)量的類(lèi)實(shí)例。
from User import User,Privilege
from User import User,Privilege p=Privilege(["刪除賬號(hào)權(quán)限"]) print('權(quán)限內(nèi)容:'+str(p.contents))
運(yùn)行結(jié)果:
權(quán)限內(nèi)容:['刪除賬號(hào)權(quán)限']
4 導(dǎo)入模塊
我們還可以一次性導(dǎo)入整個(gè)模塊, 這需要使用句點(diǎn)表示法來(lái)調(diào)用相應(yīng)的類(lèi):
import User ... p=User.Privilege(["刪除賬號(hào)權(quán)限"]) ...
4 導(dǎo)入所有類(lèi)
from User import *
非必要,不使用這種導(dǎo)入方式,因?yàn)椋?/p>
- 通過(guò)文件開(kāi)頭定義良好的 import 語(yǔ)句, 我們就可以清楚地知道使用了哪些類(lèi)。但這種導(dǎo)入方式?jīng)]有提供這種好處。
- 如果不小心導(dǎo)入了一個(gè)與本程序文件中同名的類(lèi), 就會(huì)引發(fā)難以診斷的錯(cuò)誤。
如果確實(shí)需要從一個(gè)模塊中導(dǎo)入很多類(lèi),那么建議導(dǎo)入整個(gè)模塊, 然后使用 module_name.class_name 語(yǔ)法來(lái)調(diào)用它們。
5 在模塊中導(dǎo)入另一個(gè)模塊
為了避免模塊太大或者保證模塊中的類(lèi)都是相關(guān)的, 這時(shí)就需要將類(lèi)分散到多個(gè)模塊中。這樣, 可能一個(gè)模塊中的類(lèi)會(huì)依賴(lài)另一個(gè)模塊中的類(lèi)。這種場(chǎng)景下, 我們就會(huì)在一個(gè)模塊中導(dǎo)入另一個(gè)模塊。因?yàn)閷?dǎo)入語(yǔ)法相同,所以在此就不贅述啦O(∩_∩)O~
建議一開(kāi)始讓代碼結(jié)構(gòu)盡可能簡(jiǎn)單。 即先盡可能在一個(gè)文件中完成所有的工作, 確定一切都能滿(mǎn)足業(yè)務(wù)要求正確執(zhí)行后,再將類(lèi)移到獨(dú)立的模塊中。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
- Python創(chuàng)建模塊及模塊導(dǎo)入的方法
- python根據(jù)路徑導(dǎo)入模塊的方法
- 詳解Python中的相對(duì)導(dǎo)入和絕對(duì)導(dǎo)入
- Python導(dǎo)入txt數(shù)據(jù)到mysql的方法
- Python導(dǎo)入模塊時(shí)遇到的錯(cuò)誤分析
- Python使用xlrd模塊操作Excel數(shù)據(jù)導(dǎo)入的方法
- Python導(dǎo)入oracle數(shù)據(jù)的方法
- Python3導(dǎo)入自定義模塊的三種方法詳解
- Python中幾種導(dǎo)入模塊的方式總結(jié)
- python Django批量導(dǎo)入數(shù)據(jù)
相關(guān)文章
python下調(diào)用pytesseract識(shí)別某網(wǎng)站驗(yàn)證碼的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇python下調(diào)用pytesseract識(shí)別某網(wǎng)站驗(yàn)證碼的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06利用python實(shí)現(xiàn)終身免費(fèi)的聽(tīng)書(shū)工具
本文通過(guò)實(shí)際案例,詳細(xì)介紹了作者如何利用Python庫(kù)實(shí)現(xiàn)文本轉(zhuǎn)語(yǔ)音的過(guò)程,從安裝庫(kù)到實(shí)際操作案例,都有詳細(xì)的說(shuō)明,為讀者提供了一定的參考價(jià)值2024-03-03Python中實(shí)現(xiàn)傳遞未知數(shù)量的函數(shù)參數(shù)
這篇文章主要介紹了Python中實(shí)現(xiàn)傳遞未知數(shù)量的函數(shù)參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02pytorch中nn.Sequential和nn.Module的區(qū)別與選擇方案
在 PyTorch 中,構(gòu)建神經(jīng)網(wǎng)絡(luò)模型有兩種主要方式:nn.Sequential 和 nn.Module,它們各有優(yōu)缺點(diǎn),適用于不同的場(chǎng)景,下面通過(guò)示例給大家講解pytorch中nn.Sequential和nn.Module的區(qū)別與選擇方案,感興趣的朋友一起看看吧2024-06-06Python中的np.argmin()和np.argmax()函數(shù)用法
這篇文章主要介紹了Python中的np.argmin()和np.argmax()函數(shù)用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06Python Matplotlib庫(kù)安裝與基本作圖示例
這篇文章主要介紹了Python Matplotlib庫(kù)安裝與基本作圖,簡(jiǎn)單分析了Python使用pip命令安裝Matplotlib庫(kù)及繪制三角函數(shù)曲線(xiàn)的相關(guān)操作技巧,需要的朋友可以參考下2019-01-01Pycharm-community-2020.2.3 社區(qū)版安裝教程圖文詳解
這篇文章主要介紹了Pycharm-community-2020.2.3 社區(qū)版安裝教程圖文詳解,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12