Python進階(4):類與面向對象程序設計

面向對象OOP

OOP:Object Oriented Programming,面向對象編程,面向對象中的對象(Obiect),通常是指客觀世界中存在的對象,這個對象具有唯一性,對象之間各不相同,各有各的特點,每個對象都有自己的運動規律和內部狀態;對象與對象之間又是可以相互聯系、相互作用的。另外,對象也可以是一個抽象的事物。例如,可以從圓形、正方形、三角形等圖形抽象出一個簡單圖形,簡單圖形就是一個對象,它有自己的屬性和行為,圖形中邊的個數是它的屬性,圖形的面積也是它的屬性,輸出圖形的面積就是它的行為。概括地講,面向對象技術是一種從組織結構上模擬客觀世界的方法。

對象Object由屬性和行為組成,在 Python 中,一切都是對象。即不僅是具體的事物稱為對象,字符串、函數等也都是對象

類class

類是封裝對象的屬性和行為的載體,反過來說,具有相同屬性和行為的一類實體被稱為類.將類實例化Instance之后就是對象

面向對象程序設計的特征

面向對象程序設計具有三大基本特征:封裝、繼承和多態

封裝

封裝是面向對象編程的核心思想,將對象的屬性和行為封裝起來,而將對象的屬性和行為封裝起來的載體就是類,類通常對客戶隱藏其實現細節,這就是封裝的思想。

繼承

繼承是實現重復利用的重要手段,子類通過繼承復用了父類的屬性和行為的同時,又添加了子類特有的屬性和行為。python沒有接口interface的概念,繼承是支持多個父類繼承的.而C#是單繼承的,C#通過實現接口來偽裝多繼承

多態

將父類對象應用于子類的特征就是多態.比如阿貓(Cat)阿狗(Dog)都是動物(Animal),都是Run()這個行為,但阿貓(Cat)和阿狗(Dog)運動行為是不一樣的

定義類class

class ClassName:

? ? '''類的幫助信息'''? ?#類的描述

? ? statement? ? ? ? ? ? ?#類體

ClassName:用于指定類名,一般使用大寫字母開頭,如果類名中包括兩個單詞,第二個單詞的首字母也大寫,這種命名方法也稱為“Pascal命名法”,這是慣例。當然,也可根據自己的習慣命名,但是一般推薦按照慣例來命名。

""類的幫助信息":用于指定類的文檔字符串,定義該字符串后,在創建類的對象時,輸入類名和左側的括號“(”后,將顯示該信息。

statement: 類體,主要由類變量(或類成員)、方法和屬性等定義語句組成。如果在定義類時沒想好類的具體功能,也可以在類體中直接使用 pass 語句代替。

創建類的實例

class 語句本身并不創建該類的任何實例。所以在類定義完成以后,可以創建類的實例,即實例化該類的對象。創建類的實例的語法如下:

ClassName(parameterList)

實例化類時,將自動調用__init__()方法,該方法可以認為是C#中的構造方法(函數)

__init__()方法

在創建類后,通常會創建一個 __init__()方法。該方法是一個特殊的方法,類似 Java 語言中的構造方法。每當創建一個類的新實例時,Python 都會自動執行它。 __init__()方法必須包含一個 self參數,并且必須是第一個參數。self參數是一個指向實例本身的引用,用于訪問類中的屬性和方法。在方法調用時會自動傳遞實際參數 self。因此,當 __init__()方法只有一個參數時,在創建類的實例時,就不需要指定實際參數了。self參數類似于C#的this,代表這個類本身的對象

創建類的成員來訪問

創建實例方法并訪問

所謂實例方法,是指在類中定義的函數。該函數是一種在類的實例上操作的函數。同__init__()方法一樣,實例方法的第一個參數必須是 self,并且必須包含一個 self參數。

實例方法創建完成后,可以通過類的實例名稱和點(.)操作符進行訪問。

def functionName(self,parameterList):

? ? ?block

functionName:用于指定方法名,一般使用小寫字母開頭;

self:必要參數,表示類的實例,其名稱可以是 self 以外的單詞,使用 self 只是一個習慣而己:

parammeterlist:用于指定除 self參數以外的參數,各參數間使用逗號“,”進行分隔;

block:方法體,實現的具體功能。

創建屬性成員來訪問

數據成員是指在類中定義的變量,即屬性,根據定義位置,又可以分為類屬性和實例屬性。

類屬性

類屬性是指定義在類中,并且在函數體外的屬性。類屬性可以在類的所有實例之間共享值,也就是
在所有實例化的對象中公用。類屬性可以通過類名稱或者實例名訪問。

實例屬性

實例屬性是指定義在類的方法中的屬性,只作用于當前實例中。

實例屬性只能通過實例名訪問。如果通過類名訪問實例屬性,將拋出異常

訪問限制

在類的內部可以定義屬性和方法,而在類的外部則可以直接調用屬性或方法來操作數據,從而隱藏了類內部的復雜邏輯。但是,Python 并沒有對屬性和方法的訪問權限進行限制。為了保證類內部的某些屬性或方法不被外部訪問,可以在屬性或方法名前面添加單下劃線(_f)、雙下劃線( __foo)或首尾加雙下劃線( __f__?),從而限制訪問權限。其中,單下劃線、雙下劃線、首尾雙下劃線的作用如下:

_f:以單下劃線開頭的表示 protected(保護)類型的成員,只允許類本身和子類進行訪問,但不能使用“from module import*”語句導入。

__f:雙下劃線表示 private(私有)類型的成員,只允許定義該方法的類本身進行訪問,而且也不能通過類的實例進行訪問,但是可以通過“類的實例名.類名 xxx”方式訪問。

__f__:首尾雙下劃線表示定義特殊方法,一般是系統定義名字,如__init__()

@property屬性

創建用于計算的屬性@property

在 Python 中,可以通過@property(裝飾器)將一個方法轉換為屬性,從而實現用于計算的屬性。將方法轉換為屬性后,可以直接通過方法名來訪問方法,而不需要再添加一對小括號“()”,這樣可以讓代碼更加簡潔。

為屬性添加安全保護機制

在 Python 中,默認情況下,創建的類屬性或者實例是可以在類體外進行修改的,如果想要限制其不能在類體外修改,可以將其設置為私有的,但設置為私有后,在類體外也不能獲取它的值。如果想要創建一個可以讀取,但不能修改的屬性,那么可以使用@property 實現只讀屬性。

通過屬性不僅可以將屬性設置為只讀屬性,而且可以為屬性設置攔截器,即允許對屬性進行修改,
但修改時需要遵守一定的約束。

示例程序:

class Snake:def __init__(self):print("實例化類時,自動調用構造函數__init__()")
snake = Snake()
class Mammal:'''哺乳動物'''heart='心形' #成員變量,需要類名.成員變量sequence=0def __init__(self,tooth,eye):Mammal.sequence=Mammal.sequence+1print("我是第",Mammal.sequence,"只哺乳動物,牙齒是:",tooth,",眼睛是:",eye,"心臟:",Mammal.heart)def run(self,state):'''哺乳動物奔跑方式,自定義函數:param state: 奔跑方式'''print("動物正在奔跑,奔跑方式為:",state)
dog=Mammal("犬齒","卵形")
dog.run("跨步")
for i in range(4):Mammal("臼齒","小眼")
class Rectangle:def __init__(self,width,height):self.width=widthself.height=height@property #將方法轉換為屬性def area(self):return self.width*self.height
rect=Rectangle(30,40)
print("矩形的寬度:",rect.width,",矩形的高度:",rect.height,",面積:", rect.area)

運行如圖:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91066.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91066.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91066.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何在 Shopify 中創建退貨標簽

退貨是電商運營中不可避免的一環,而一個順暢、透明的退貨流程,不僅能減少客戶投訴,也有助于提升顧客對品牌的信任與忠誠度。Shopify 雖然沒有內建退貨標簽自動生成功能,但通過合理設置與外部工具整合,你完全可以打造一…

I2C設備寄存器讀取調試方法

1、查看I2C掛載設備 2、讀取i2C設備所有寄存器 3、讀取i2c設備的某個寄存器 4、向i2C設備某個寄存器寫入一個值1、查看

K8S的Helm包管理器

一、背景 官網: https://helm.sh/ 我們針對K8S環境中,部署對應的應用,無外乎就是編寫一堆yaml資源清單文件. 資源清單、依賴性少的時候,可以直接手動維護。但是,隨著資源清單越來越復雜,越來越多,不同的環…

多模態數據處理新趨勢:阿里云ODPS技術棧深度解析與未來展望

多模態數據處理新趨勢:阿里云ODPS技術棧深度解析與未來展望 🌟 嗨,我是IRpickstars! 🌌 總有一行代碼,能點亮萬千星辰。 🔍 在技術的宇宙中,我愿做永不停歇的探索者。 ? 用代碼丈…

AI數據分析儀設計原理圖:RapidIO信號接入 平板AI數據分析儀

AI數據分析儀設計原理圖:RapidIO信號接入 平板AI數據分析儀 1 、概述 本儀器是一款面向工業控制、新能源、震動測量等業務開發的平板AI數據分析儀。基于 Jetson Orin Nano(AI邊緣計算)、實現RapidIO接口數據接入,進行AI分析。Rap…

人工智能正逐步商品化,而“理解力”才是開發者的真正超能力

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

玩轉ClaudeCode:ClaudeCode安裝教程(Windows+Linux+MacOS)

Windows 環境安裝 Claude Code 一、安裝 WSL 環境 1. 確認 Windows 功能已開啟 打開 “控制面板 → 程序 → 啟用或關閉 Windows 功能” 勾選 “適用于 Linux 的 Windows 子系統” 和 “虛擬機平臺” 點“確定”后重啟電腦。 開機后,管理員模式打開 Terminal…

PyTorch多層感知機(MLP)模型構建與MNIST分類訓練

沖沖沖😊 here😊 文章目錄PyTorch多層感知機模型構建與MNIST分類訓練筆記🎯 1. 任務概述?? 2. 環境設置2.1 導入必要庫2.2 GPU配置🧠 3. 模型構建3.1 模型定義關鍵點3.2 損失函數選擇3.3 模型初始化與設備選擇🔧 4. …

android tabLayout 切換fragment fragment生命周期

1、TabLayout 與 Fragment 結合使用的常見方式 通常會使用 FragmentPagerAdapter 或 FragmentStatePagerAdapter 與 ViewPager 配合,再將 TabLayout 與 ViewPager 關聯,實現通過 TabLayout 切換 Fragment。 以下是布局文件示例 activity_main.xml: <LinearLayout xmln…

馬蹄集 BD202401補給

可怕的戰爭發生了&#xff0c;小度作為后勤保障工作人員&#xff0c;也要為了保衛國家而努力。現在有 N(1≤N≤)個堡壘需要補給&#xff0c;然而總的預算 B(1≤B≤)是有限的。現在已知第 i 個堡壘需要價值 P(i) 的補給&#xff0c;并且需要 S(i) 的運費。 鑒于小度與供應商之間…

《Llava:Visual Instruction Tuning》論文精讀筆記

論文鏈接&#xff1a;arxiv.org/pdf/2304.08485 參考視頻&#xff1a;LLAVA講解_嗶哩嗶哩_bilibili [論文速覽]LLaVA: Visual Instruction Tuning[2304.08485]_嗶哩嗶哩_bilibili 標題&#xff1a;Visual Instruction Tuning 視覺指令微調 背景引言 大模型的Instruction…

【DataWhale】快樂學習大模型 | 202507,Task01筆記

引言 我從2016年開始接觸matlab看別人做語音識別&#xff0c;再接觸tensorflow的神經網絡&#xff0c;2017年接觸語音合成&#xff0c;2020年做落地的醫院手寫數字識別。到2020年接觸pytorch做了計算機視覺圖像分類&#xff0c;到2021年做了目標檢測&#xff0c;2022年做了文本…

機器學習中的樸素貝葉斯(Naive Bayes)模型

1. 用實例來理解樸素貝葉斯 下面用具體的數據來演示垃圾郵件 vs 正常郵件的概率計算假設我們有一個小型郵件數據集郵件內容類別&#xff08;垃圾/正常&#xff09;“免費 贏取 大獎”垃圾“免費 參加會議”正常“中獎 點擊 鏈接”垃圾“明天 開會”正常“贏取 免費 禮品”垃圾 …

document.documentElement詳解

核心概念定義 它始終指向當前文檔的根元素&#xff0c;在 HTML 文檔中對應 <html> 標簽。與 document.body&#xff08;對應 <body>&#xff09;和 document.head&#xff08;對應 <head>&#xff09;形成層級關系。與 document.body 的區別 <html> &l…

c#進階之數據結構(動態數組篇)----Queue

1、簡介這個是c#封裝的隊列類型&#xff0c;同棧相反&#xff0c;這個是先進先出&#xff0c;一般用于事件注冊&#xff0c;或者數據的按順序處理&#xff0c;理解為需要排隊處理的可以用隊列來處理。注意&#xff0c;隊列一定是有順序的&#xff0c;先進確實是會先出&#xff…

使用 keytool 在服務器上導入證書操作指南(SSL 證書驗證錯誤處理)

使用 keytool 在服務器上導入證書操作指南(SSL 證書驗證錯誤處理) 一、概述 本文檔用于指導如何在運行 Java 應用程序的服務器上,通過keytool工具將證書導入 Java 信任庫,解決因證書未被信任導致的 SSL/TLS 通信問題(如PKIX path building failed錯誤)。 二、操作步驟…

VUE export import

目錄 命名導出 導出變量 導出函數 總結 默認導出 導出變量 導出函數 總結 因為總是搞不懂export和Import什么時候需要加{}&#xff0c;什么時候不用&#xff0c;所以自己測試了一下&#xff0c;以下是總結。 需不需要加{}取決于命名導出還是默認導出&#xff0c;命名導…

端側寵物識別+拍攝控制智能化:解決設備識別頻次識別率雙低問題

隨著寵物成為家庭重要成員&#xff0c;寵物影像創作需求激增&#xff0c;傳統相機系統 “人臉優先” 的調度邏輯已難以應對寵物拍攝的復雜場景。毛發邊緣模糊、動態姿態多變、光照反差劇烈等問題&#xff0c;推動著智能拍攝技術向 “寵物優先” 范式轉型。本文基于端側 AI 部署…

Popover API 實戰指南:前端彈層體驗的原生重構

&#x1fa84; Popover API 實戰指南&#xff1a;前端彈層體驗的原生重構 還在用 position: absolute JS 定位做 tooltip&#xff1f;還在引入大型 UI 庫只為做個浮層&#xff1f;現在瀏覽器已經支持了真正原生的「彈出層 API」&#xff0c;一行 HTMLCSS 就能構建可交互、無障…

CCS-MSPM0G3507-6-模塊篇-OLED的移植

前言基礎篇結束&#xff0c;接下來我們來開始進行模塊驅動如果懂把江科大的OLED移植成HAL庫&#xff0c;那其實也沒什么難首先配置OLED的引腳這里我配置PA16和17為推挽輸出&#xff0c;PA0和1不要用&#xff0c;因為只有那兩個引腳能使用MPU6050 根據配置出來的引腳&#xff0c…