Python 類(lèi)封裝功能:面向?qū)ο缶幊痰幕A(chǔ)知識(shí)
1. 什么是封裝封裝Encapsulation是面向?qū)ο缶幊蘋(píng)OP的三大核心特性之一另外兩個(gè)是繼承和多態(tài)。封裝的核心思想是將數(shù)據(jù)屬性和操作數(shù)據(jù)的方法方法捆綁在一起形成一個(gè)獨(dú)立的單元——類(lèi)Class。通過(guò)封裝我們可以隱藏對(duì)象的內(nèi)部實(shí)現(xiàn)細(xì)節(jié)只對(duì)外暴露必要的接口從而提高代碼的安全性、可維護(hù)性和可重用性。2. 封裝的基本實(shí)現(xiàn)在 Python 中封裝主要通過(guò)類(lèi)來(lái)實(shí)現(xiàn)。一個(gè)類(lèi)可以包含屬性和方法并通過(guò)訪問(wèn)控制來(lái)管理對(duì)內(nèi)部數(shù)據(jù)的訪問(wèn)。2.1 定義類(lèi)與實(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)建對(duì)象 stu1 Student(張三, 18) print(stu1.introduce()) # 輸出我叫張三今年18歲。2.2 訪問(wèn)控制公有、保護(hù)與私有Python 通過(guò)命名約定來(lái)實(shí)現(xiàn)不同級(jí)別的訪問(wèn)控制公有成員Public普通命名如name、age可以在類(lèi)的外部直接訪問(wèn)。保護(hù)成員Protected以單下劃線開(kāi)頭如_protected_var這是一種約定表示該成員僅供類(lèi)內(nèi)部和子類(lèi)使用但 Python 并不強(qiáng)制限制外部訪問(wèn)。私有成員Private以雙下劃線開(kāi)頭如__private_varPython 會(huì)進(jìn)行名稱(chēng)改寫(xiě)Name Mangling使其在類(lèi)外部難以直接訪問(wèn)從而實(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): # 通過(guò)公有方法訪問(wèn)私有屬性 return self.__balance def deposit(self, amount): if amount gt; 0: self.__balance amount return True return False account BankAccount(李四, 1000) print(account.owner) # 正常訪問(wèn)李四 print(account._bank_name) # 可以訪問(wèn)但不建議某銀行 print(account.__balance) # 直接訪問(wèn)會(huì)報(bào)錯(cuò)AttributeError print(account.get_balance()) # 通過(guò)方法訪問(wèn)10003. 封裝的優(yōu)點(diǎn)數(shù)據(jù)保護(hù)防止外部代碼隨意修改對(duì)象的內(nèi)部狀態(tài)確保數(shù)據(jù)的完整性和安全性。接口簡(jiǎn)化用戶只需要知道如何使用類(lèi)提供的公有方法無(wú)需了解內(nèi)部復(fù)雜的實(shí)現(xiàn)邏輯。代碼維護(hù)內(nèi)部實(shí)現(xiàn)的修改不會(huì)影響外部代碼的使用只要接口保持不變。模塊化將相關(guān)的數(shù)據(jù)和操作封裝在一起提高了代碼的模塊化程度。4. 屬性裝飾器更優(yōu)雅的封裝Python 提供了property、屬性名.setter和屬性名.deleter裝飾器可以讓我們以訪問(wèn)屬性的語(yǔ)法來(lái)調(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)錯(cuò)area 是只讀屬性5.案例示例1使用turtle模塊結(jié)合類(lèi)封裝以下功能 # 繪制圓形繪制矩形繪制三角形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)建一個(gè)點(diǎn)類(lèi)x,y 隨機(jī)兩個(gè)點(diǎn)求兩個(gè)點(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)建一個(gè)圓Circle類(lèi) # 為該類(lèi)提供一個(gè)初始化方法用于初始化半徑 # 為該類(lèi)提供兩個(gè)方法 # 方法一用 于求圓的面積方法二用于求圓的周長(zhǎng)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)用場(chǎng)景6.1 數(shù)據(jù)驗(yàn)證在設(shè)置屬性值時(shí)進(jìn)行數(shù)據(jù)驗(yàn)證確保數(shù)據(jù)的有效性。6.2 計(jì)算屬性將需要計(jì)算得到的值封裝為屬性對(duì)外提供統(tǒng)一的訪問(wèn)接口。6.3 隱藏復(fù)雜實(shí)現(xiàn)將復(fù)雜的算法或數(shù)據(jù)處理過(guò)程封裝在類(lèi)內(nèi)部對(duì)外提供簡(jiǎn)單的調(diào)用方法。7. 總結(jié)封裝是 Python 面向?qū)ο缶幊痰幕Mㄟ^(guò)合理使用類(lèi)、訪問(wèn)控制和屬性裝飾器我們可以構(gòu)建出結(jié)構(gòu)清晰、安全可靠、易于維護(hù)的代碼。掌握封裝不僅有助于編寫(xiě)更好的 Python 程序也是理解更高級(jí)設(shè)計(jì)模式的前提。在實(shí)際開(kāi)發(fā)中建議將不需要對(duì)外暴露的屬性和方法設(shè)為私有。通過(guò)公有方法或?qū)傩匝b飾器來(lái)提供對(duì)內(nèi)部數(shù)據(jù)的受控訪問(wèn)。保持類(lèi)的職責(zé)單一避免創(chuàng)建過(guò)于龐大的類(lèi)。

相關(guān)新聞

告別手速焦慮!DamaiHelper全能搶票王:多平臺(tái)自動(dòng)化搶票終極指南 [特殊字符]?

告別手速焦慮!DamaiHelper全能搶票王:多平臺(tái)自動(dòng)化搶票終極指南 [特殊字符]?

告別手速焦慮!DamaiHelper全能搶票王:多平臺(tái)自動(dòng)化搶票終極指南 🎟? 【免費(fèi)下載鏈接】damaihelper 支持大麥網(wǎng),淘票票、繽玩島等多個(gè)平臺(tái),演唱會(huì)演出搶票腳本 項(xiàng)目地址: https://gitcode.com/gh_mirrors/dam/damaih…

2026/8/1 2:49:42 閱讀更多
8款A(yù)I論文輔助工具評(píng)測(cè)與使用策略

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

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

2026/8/1 2:49:42 閱讀更多
51單片機(jī)+TLC1543實(shí)現(xiàn)雙路交流電流檢測(cè)與LCD1602顯示系統(tǒng)

51單片機(jī)+TLC1543實(shí)現(xiàn)雙路交流電流檢測(cè)與LCD1602顯示系統(tǒng)

如果你正在用51單片機(jī)做電流檢測(cè)項(xiàng)目,特別是需要同時(shí)監(jiān)測(cè)兩路交流電流,還希望用LCD1602實(shí)時(shí)顯示數(shù)據(jù),那么TLC1543這款11通道10位ADC芯片可能是你最容易忽略但最實(shí)用的選擇。 很多初學(xué)者在電流檢測(cè)項(xiàng)目中會(huì)直接使用單片機(jī)自帶的ADC&#xff0…

2026/8/1 18:11:49 閱讀更多
QCMA:跨平臺(tái)PS Vita管理助手終極解決方案

QCMA:跨平臺(tái)PS Vita管理助手終極解決方案

QCMA:跨平臺(tái)PS Vita管理助手終極解決方案 【免費(fèi)下載鏈接】qcma Cross-platform content manager assistant for the PS Vita 項(xiàng)目地址: https://gitcode.com/gh_mirrors/qc/qcma 價(jià)值定位:為什么需要替代官方CMA? 你是否還在為PS Vi…

2026/8/1 18:11:49 閱讀更多
5分鐘掌握CNKI-download:知網(wǎng)文獻(xiàn)批量下載的智能爬蟲(chóng)工具

5分鐘掌握CNKI-download:知網(wǎng)文獻(xiàn)批量下載的智能爬蟲(chóng)工具

5分鐘掌握CNKI-download:知網(wǎng)文獻(xiàn)批量下載的智能爬蟲(chóng)工具 【免費(fèi)下載鏈接】CNKI-download :frog: 知網(wǎng)(CNKI)文獻(xiàn)下載及文獻(xiàn)速覽爬蟲(chóng) (Web Scraper for Extracting Data) 項(xiàng)目地址: https://gitcode.com/gh_mirrors/cn/CNKI-download 知網(wǎng)文獻(xiàn)批量下載工具C…

2026/8/1 18:11:49 閱讀更多
4.3英寸電子墨水屏UART模塊:從原理到低功耗應(yīng)用實(shí)戰(zhàn)

4.3英寸電子墨水屏UART模塊:從原理到低功耗應(yīng)用實(shí)戰(zhàn)

1. 項(xiàng)目緣起:為什么選擇4.3英寸電子墨水屏UART模塊?幾年前,我在做一個(gè)需要戶外展示信息的項(xiàng)目,當(dāng)時(shí)被幾個(gè)問(wèn)題困擾了很久:設(shè)備需要長(zhǎng)時(shí)間顯示固定信息,但功耗必須極低,最好能用電池?fù)螏讉€(gè)月&…

2026/8/1 18:11:49 閱讀更多
構(gòu)建動(dòng)態(tài)SCI論文寫(xiě)作句式庫(kù):從地道表達(dá)到邏輯架構(gòu)的實(shí)戰(zhàn)指南

構(gòu)建動(dòng)態(tài)SCI論文寫(xiě)作句式庫(kù):從地道表達(dá)到邏輯架構(gòu)的實(shí)戰(zhàn)指南

1. 項(xiàng)目概述:為什么我們需要一個(gè)“活”的句式庫(kù)? 寫(xiě)英文SCI論文,最折磨人的往往不是實(shí)驗(yàn)數(shù)據(jù)不夠漂亮,也不是理論不夠深刻,而是心里有千言萬(wàn)語(yǔ),落到鍵盤(pán)上卻詞不達(dá)意。你肯定有過(guò)這樣的經(jīng)歷:好不…

2026/8/1 18:01:49 閱讀更多
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信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專(zhuān)用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

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

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

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(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信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專(zhuān)用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

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

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

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

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