Python 類封裝功能:面向?qū)ο缶幊痰幕A(chǔ)知識
1. 什么是封裝封裝Encapsulation是面向?qū)ο缶幊蘋OP的三大核心特性之一另外兩個是繼承和多態(tài)。封裝的核心思想是將數(shù)據(jù)屬性和操作數(shù)據(jù)的方法方法捆綁在一起形成一個獨(dú)立的單元——類Class。通過封裝我們可以隱藏對象的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)只對外暴露必要的接口從而提高代碼的安全性、可維護(hù)性和可重用性。2. 封裝的基本實(shí)現(xiàn)在 Python 中封裝主要通過類來實(shí)現(xiàn)。一個類可以包含屬性和方法并通過訪問控制來管理對內(nèi)部數(shù)據(jù)的訪問。2.1 定義類與實(shí)例屬性class Student: def __init__(self, name, age): # 實(shí)例屬性 self.name name self.age age def introduce(self): return f我叫{self.name}今年{self.age}歲。 創(chuàng)建對象 stu1 Student(張三, 18) print(stu1.introduce()) # 輸出我叫張三今年18歲。2.2 訪問控制公有、保護(hù)與私有Python 通過命名約定來實(shí)現(xiàn)不同級別的訪問控制公有成員Public普通命名如name、age可以在類的外部直接訪問。保護(hù)成員Protected以單下劃線開頭如_protected_var這是一種約定表示該成員僅供類內(nèi)部和子類使用但 Python 并不強(qiáng)制限制外部訪問。私有成員Private以雙下劃線開頭如__private_varPython 會進(jìn)行名稱改寫Name Mangling使其在類外部難以直接訪問從而實(shí)現(xiàn)一定程度的保護(hù)。class BankAccount: def __init__(self, owner, balance): self.owner owner # 公有屬性 self._bank_name 某銀行 # 保護(hù)屬性 self.__balance balance # 私有屬性 def get_balance(self): # 通過公有方法訪問私有屬性 return self.__balance def deposit(self, amount): if amount gt; 0: self.__balance amount return True return False account BankAccount(李四, 1000) print(account.owner) # 正常訪問李四 print(account._bank_name) # 可以訪問但不建議某銀行 print(account.__balance) # 直接訪問會報(bào)錯AttributeError print(account.get_balance()) # 通過方法訪問10003. 封裝的優(yōu)點(diǎn)數(shù)據(jù)保護(hù)防止外部代碼隨意修改對象的內(nèi)部狀態(tài)確保數(shù)據(jù)的完整性和安全性。接口簡化用戶只需要知道如何使用類提供的公有方法無需了解內(nèi)部復(fù)雜的實(shí)現(xiàn)邏輯。代碼維護(hù)內(nèi)部實(shí)現(xiàn)的修改不會影響外部代碼的使用只要接口保持不變。模塊化將相關(guān)的數(shù)據(jù)和操作封裝在一起提高了代碼的模塊化程度。4. 屬性裝飾器更優(yōu)雅的封裝Python 提供了property、屬性名.setter和屬性名.deleter裝飾器可以讓我們以訪問屬性的語法來調(diào)用方法實(shí)現(xiàn)更精細(xì)的控制。class Rectangle: def __init__(self, width, height): self._width width self._height height property def width(self): 獲取寬度 return self._width width.setter def width(self, value): 設(shè)置寬度并進(jìn)行合法性檢查 if value lt; 0: raise ValueError(寬度必須大于0) self._width value property def area(self): 計(jì)算面積只讀屬性 return self._width * self._height rect Rectangle(5, 3) print(rect.width) # 輸出5 rect.width 10 # 調(diào)用 setter 方法 print(rect.area) # 輸出30 rect.area 100 # 報(bào)錯area 是只讀屬性5.案例示例1使用turtle模塊結(jié)合類封裝以下功能 # 繪制圓形繪制矩形繪制三角形import turtle class ShapeDraw: def __init__(self, speed 3): self.t turtle.Turtle() self.t.speed(speed) self.screen turtle.Screen() def draw_circle(self, x, y, r, color black, pensize 1): self.t.up() self.t.goto(x, y - r) self.t.down() self.t.color(color) self.t.pensize(pensize) self.t.circle(r) def draw_jx(self, x ,y, width, heigth, color black, pensize 1): self.t.up() self.t.goto(x, y) self.t.down() self.t.color(color) self.t.pensize(pensize) for _ in range(2): self.t.forward(width) self.t.right(90) self.t.forward(heigth) self.t.right(90) def draw_triangel(self, x, y, length, color pink, pensize 2): self.t.up() self.t.goto(x, y) self.t.down() self.t.color(color) self.t.pensize(pensize) for _ in range(3): self.t.forward(length) self.t.right(120) def hide_turtle(self): self.t.hideturtle() def showturtle(self): self.t.showturtle() def show(self): # 新增保持窗口顯示 self.screen.mainloop() drawer ShapeDraw() drawer.draw_circle(150, 100, 50, red) drawer.draw_jx(-200, 200, 100, 150) drawer.draw_triangel(150, -150, 150, pink) drawer.hide_turtle() drawer.showturtle() drawer.show()運(yùn)行結(jié)果示例2創(chuàng)建一個點(diǎn)類x,y 隨機(jī)兩個點(diǎn)求兩個點(diǎn)之間的距離import random class Points: def __init__(self, x, y): self.x x self.y y def get_x(self): return self.x def get_y(self): return self.y ps [(random.randint(1, 10),random.randint(1, 10)) for _ in range(2)] for p in ps: print(p) p1 Points(ps[0][0], ps[0][1]) p2 Points(ps[1][0], ps[1][1]) dis ((p1.get_x() - p2.get_x()) ** 2 (p1.get_y() - p2.get_y()) ** 2) ** 0.5 print(dis)運(yùn)行結(jié)果示例3創(chuàng)建一個圓Circle類 # 為該類提供一個初始化方法用于初始化半徑 # 為該類提供兩個方法 # 方法一用 于求圓的面積方法二用于求圓的周長class Circle: def __init__(self, radius): self.radius radius def area(self): return self.radius * self.radius * 3.14 def c(self): return self.radius * 2 * 3.14 c1 Circle(1) print(c1.area()) print(c1.c())6. 封裝的實(shí)際應(yīng)用場景6.1 數(shù)據(jù)驗(yàn)證在設(shè)置屬性值時進(jìn)行數(shù)據(jù)驗(yàn)證確保數(shù)據(jù)的有效性。6.2 計(jì)算屬性將需要計(jì)算得到的值封裝為屬性對外提供統(tǒng)一的訪問接口。6.3 隱藏復(fù)雜實(shí)現(xiàn)將復(fù)雜的算法或數(shù)據(jù)處理過程封裝在類內(nèi)部對外提供簡單的調(diào)用方法。7. 總結(jié)封裝是 Python 面向?qū)ο缶幊痰幕Mㄟ^合理使用類、訪問控制和屬性裝飾器我們可以構(gòu)建出結(jié)構(gòu)清晰、安全可靠、易于維護(hù)的代碼。掌握封裝不僅有助于編寫更好的 Python 程序也是理解更高級設(shè)計(jì)模式的前提。在實(shí)際開發(fā)中建議將不需要對外暴露的屬性和方法設(shè)為私有。通過公有方法或?qū)傩匝b飾器來提供對內(nèi)部數(shù)據(jù)的受控訪問。保持類的職責(zé)單一避免創(chuàng)建過于龐大的類。

相關(guān)新聞

8款A(yù)I論文輔助工具評測與使用策略

8款A(yù)I論文輔助工具評測與使用策略

1. 論文寫作工具現(xiàn)狀與痛點(diǎn)分析臨近畢業(yè)季,每年都有大量學(xué)生面臨論文寫作的困擾。特別是對于??圃盒5耐瑢W(xué)來說,缺乏系統(tǒng)的學(xué)術(shù)訓(xùn)練和寫作經(jīng)驗(yàn),從選題到格式調(diào)整的每個環(huán)節(jié)都可能成為攔路虎。傳統(tǒng)論文寫作需要經(jīng)歷文獻(xiàn)檢索、框架搭建、內(nèi)容撰…

2026/8/1 2:49:42 閱讀更多
FCC禁止進(jìn)口外國制造機(jī)器人吸塵器,對Roomba意味著什么?

FCC禁止進(jìn)口外國制造機(jī)器人吸塵器,對Roomba意味著什么?

聯(lián)邦通信委員會(FCC)已禁止銷售和進(jìn)口外國生產(chǎn)的機(jī)器人設(shè)備及電力逆變器,此舉是特朗普政府AI行動計(jì)劃的組成部分。FCC認(rèn)為,機(jī)器人吸塵器、割草機(jī)器人等先進(jìn)機(jī)器人設(shè)備對美國消費(fèi)者構(gòu)成網(wǎng)絡(luò)安全風(fēng)險,可能被用于監(jiān)控等有…

2026/8/1 3:59:44 閱讀更多
知網(wǎng)與維普AIGC檢測機(jī)制對比及學(xué)術(shù)查重實(shí)戰(zhàn)指南

知網(wǎng)與維普AIGC檢測機(jī)制對比及學(xué)術(shù)查重實(shí)戰(zhàn)指南

1. 學(xué)術(shù)查重平臺AIGC檢測功能深度對比去年幫學(xué)弟修改畢業(yè)論文時,我同時使用了知網(wǎng)和維普的AIGC檢測功能,結(jié)果兩份報(bào)告竟有12%的差異率。這種差異在學(xué)術(shù)圈其實(shí)很常見——去年某高校抽查的86篇論文中,使用不同平臺檢測的結(jié)果差異超過10%的占比達(dá)…

2026/8/1 3:59:44 閱讀更多
推挽與開漏輸出電路原理詳解:從MOSFET結(jié)構(gòu)到I2C總線應(yīng)用

推挽與開漏輸出電路原理詳解:從MOSFET結(jié)構(gòu)到I2C總線應(yīng)用

1. 從兩個經(jīng)典電路說起:推挽與開漏的本質(zhì)區(qū)別搞嵌入式開發(fā)或者硬件設(shè)計(jì)的朋友,對“推挽輸出”和“開漏輸出”這兩個詞肯定不陌生。不管是配置STM32的GPIO,還是閱讀各種傳感器、通信芯片的數(shù)據(jù)手冊,這兩個概念就像一對形影不離的兄…

2026/8/1 3:59:44 閱讀更多
JDK23 安裝包(附安裝教程)

JDK23 安裝包(附安裝教程)

Java 是一種廣泛使用的高級編程語言,由 Sun Microsystems 于 1995 年推出,后被 Oracle 收購。它具有跨平臺性、面向?qū)ο蟆⒏咝阅?、安全性?qiáng)等特點(diǎn),廣泛應(yīng)用于企業(yè)級應(yīng)用開發(fā)、移動應(yīng)用(Android)、大數(shù)據(jù)處理、云計(jì)算等…

2026/8/1 3:59:44 閱讀更多
化工園區(qū)做AR安全巡檢推薦哪家供應(yīng)商

化工園區(qū)做AR安全巡檢推薦哪家供應(yīng)商

在化工園區(qū)數(shù)字化轉(zhuǎn)型的深水區(qū),傳統(tǒng)的安全巡檢模式正面臨嚴(yán)峻挑戰(zhàn)。紙質(zhì)記錄易篡改、專家資源調(diào)度難、隱患排查不直觀等問題,已成為制約安全生產(chǎn)效率的瓶頸。隨著“產(chǎn)業(yè)元宇宙”概念的落地,AR(增強(qiáng)現(xiàn)實(shí))智慧運(yùn)維解決方…

2026/8/1 3:59:44 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號分配電路板。該型號(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號路由與分配功能。連接控制…

2026/8/1 0:09:33 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動化設(shè)備及通用機(jī)械驅(qū)動。該型號(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動機(jī)。額定…

2026/8/1 0:09:33 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號分配電路板。該型號(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號路由與分配功能。連接控制…

2026/8/1 0:09:33 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動化設(shè)備及通用機(jī)械驅(qū)動。該型號(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動機(jī)。額定…

2026/8/1 0:09:33 閱讀更多