面向對象編程篇

文章目錄

    • 一、思維導圖
    • 二、詳細內容
      • 第 6 章:面向對象編程基礎
        • 6.1 面向對象編程的概念和優勢
        • 6.2 類和對象的定義與創建
        • 6.3 類的屬性和方法
        • 6.4 構造函數(__init__)和析構函數(__del__)
        • 6.5 封裝、繼承和多態的實現
      • 第 7 章:高級面向對象編程
        • 7.1 類的特殊方法(如 __str__、__len__ 等)
        • 7.2 類的靜態方法和類方法
        • 7.3 抽象基類和抽象方法
        • 7.4 多重繼承和方法解析順序(MRO)
    • 三、總結

一、思維導圖

在這里插入圖片描述

二、詳細內容

第 6 章:面向對象編程基礎

6.1 面向對象編程的概念和優勢

面向對象編程(Object-Oriented Programming,OOP)是一種編程范式,它將數據和操作數據的方法封裝在一起,形成對象。對象之間通過消息傳遞進行交互。

優勢:

  • 可維護性:代碼結構清晰,易于理解和修改。
  • 可擴展性:可以通過繼承和多態方便地擴展功能。
  • 可重用性:可以復用已有的類和對象。
6.2 類和對象的定義與創建

在 Python 中,使用 class 關鍵字定義類,類是對象的藍圖,對象是類的實例。

# 定義一個簡單的類
class Person:pass# 創建對象
p1 = Person()
p2 = Person()
6.3 類的屬性和方法

類的屬性是類的特征,方法是類的行為。

class Person:# 類屬性species = "Homo sapiens"def __init__(self, name, age):# 實例屬性self.name = nameself.age = age# 實例方法def introduce(self):print(f"Hi, my name is {self.name} and I'm {self.age} years old.")p = Person("Alice", 25)
print(p.species)  # 訪問類屬性
p.introduce()  # 調用實例方法
6.4 構造函數(init)和析構函數(del
  • 構造函數__init__ 方法在創建對象時自動調用,用于初始化對象的屬性。
  • 析構函數__del__ 方法在對象被銷毀時自動調用。
class Person:def __init__(self, name):self.name = nameprint(f"{self.name} is created.")def __del__(self):print(f"{self.name} is destroyed.")p = Person("Bob")
del p
6.5 封裝、繼承和多態的實現
  • 封裝:將數據和操作數據的方法封裝在一起,隱藏對象的內部實現細節。
  • 繼承:子類可以繼承父類的屬性和方法,從而實現代碼的復用。
  • 多態:不同的對象可以對同一消息做出不同的響應。
# 封裝
class BankAccount:def __init__(self, balance):self.__balance = balance  # 私有屬性def deposit(self, amount):self.__balance += amountdef get_balance(self):return self.__balance# 繼承
class SavingsAccount(BankAccount):def __init__(self, balance, interest_rate):super().__init__(balance)self.interest_rate = interest_ratedef calculate_interest(self):return self.get_balance() * self.interest_rate# 多態
class Animal:def speak(self):passclass Dog(Animal):def speak(self):print("Woof!")class Cat(Animal):def speak(self):print("Meow!")def make_animal_speak(animal):animal.speak()dog = Dog()
cat = Cat()
make_animal_speak(dog)
make_animal_speak(cat)

第 7 章:高級面向對象編程

7.1 類的特殊方法(如 strlen 等)

特殊方法以雙下劃線開頭和結尾,用于實現對象的特殊行為。

class Book:def __init__(self, title, author, pages):self.title = titleself.author = authorself.pages = pagesdef __str__(self):return f"{self.title} by {self.author}"def __len__(self):return self.pagesbook = Book("Python Crash Course", "Eric Matthes", 500)
print(book)  # 調用 __str__ 方法
print(len(book))  # 調用 __len__ 方法
7.2 類的靜態方法和類方法
  • 靜態方法:使用 @staticmethod 裝飾器定義,不需要實例化對象就可以調用,與類和實例無關。
  • 類方法:使用 @classmethod 裝飾器定義,第一個參數是類本身,通常用于創建類的實例。
class MathUtils:@staticmethoddef add(a, b):return a + b@classmethoddef create_from_list(cls, numbers):return sum(numbers)print(MathUtils.add(2, 3))  # 調用靜態方法
print(MathUtils.create_from_list([1, 2, 3]))  # 調用類方法
7.3 抽象基類和抽象方法

抽象基類是包含抽象方法的類,抽象方法是沒有實現的方法,子類必須實現這些抽象方法。

from abc import ABC, abstractmethodclass Shape(ABC):@abstractmethoddef area(self):passclass Circle(Shape):def __init__(self, radius):self.radius = radiusdef area(self):return 3.14 * self.radius ** 2circle = Circle(5)
print(circle.area())
7.4 多重繼承和方法解析順序(MRO)

多重繼承是指一個子類可以繼承多個父類的屬性和方法。方法解析順序(MRO)決定了在多重繼承中調用方法的順序。

class A:def method(self):print("A's method")class B:def method(self):print("B's method")class C(A, B):passc = C()
c.method()  # 調用 A 的方法,因為 A 在 MRO 中排在前面
print(C.mro())  # 查看 MRO

三、總結

面向對象編程是一種強大的編程范式,它通過封裝、繼承和多態等特性,提高了代碼的可維護性、可擴展性和可重用性。在基礎部分,我們學習了類和對象的定義、屬性和方法的使用,以及構造函數和析構函數的作用。在高級部分,我們深入探討了類的特殊方法、靜態方法和類方法,以及抽象基類和多重繼承等概念。掌握這些知識,將有助于我們編寫更加高效、靈活和可維護的代碼。

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

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

相關文章

虛擬商品自動化實踐:閑魚訂單防漏發與模板化管理的技術解析

最近阿燦發現了一款閑魚虛擬商品賣家必備神器!告別手動發貨,訂單自動處理,防錯防漏,支持課程、激活碼、電子書等多種商品,預設模板更省心。文末獲取工具!最厲害的是,你完全不用一直開著電腦。以…

【Zephyr開發實踐系列】08_NVS文件系統調試記錄

文章目錄前言一、NVS原理介紹:二、BUG-NO1:將NVS運用在NAND-Flash類大容量存儲設備2.1 情況描述:2.2 BUG復現:文件系統設備樹構建測試應用編寫(導致錯誤部分):問題呈現:2.3 問題簡述…

網絡安全第二次作業

靶場闖關1~8 1. 在url后的name后輸入payload ?name<script>alert(1)</script> 2. 嘗試在框中輸入上一關的payload,發現并沒有通過&#xff0c;此時我們可以點開頁面的源代碼看看我們輸入的值被送到什么地方去了 從圖中可以看到&#xff0c;我們輸入的值被送到i…

LangChain 源碼剖析(七)RunnableBindingBase 深度剖析:給 Runnable“穿衣服“ 的裝飾器架構

每一篇文章都短小精悍&#xff0c;不啰嗦。一、功能定位&#xff1a;Runnable 的 "增強包裝器"RunnableBindingBase 是 LangChain 中實現裝飾器模式的核心組件。它就像給原有 Runnable 套上一件 "功能外套"—— 不改變原有 Runnable 的核心邏輯&#xff0c…

為 Git branch 命令添加描述功能

寫在最前面的使用方式 查看 所有分支的備注 git branch.notes創建分支并為分支添加備注 git co -b feat/oauth -m 第三方用戶登錄對分支描述的添加與清除 添加 git branch.note --add 清除 git branch.note --clear &#x1f4dd; 為 Git branch 命令添加描述功能 &#x…

LeetCode|Day18|20. 有效的括號|Python刷題筆記

LeetCode&#xff5c;Day18&#xff5c;20. 有效的括號&#xff5c;Python刷題筆記 &#x1f5d3;? 本文屬于【LeetCode 簡單題百日計劃】系列 &#x1f449; 點擊查看系列總目錄 >> &#x1f4cc; 題目簡介 題號&#xff1a;20. 有效的括號 難度&#xff1a;簡單 題目…

使?Pytorch構建?個神經?絡

關于torch.nn:使?Pytorch來構建神經?絡, 主要的?具都在torch.nn包中.nn依賴于autograd來定義模型, 并對其?動求導.構建神經?絡的典型流程:定義?個擁有可學習參數的神經?絡遍歷訓練數據集處理輸?數據使其流經神經?絡計算損失值將?絡參數的梯度進?反向傳播以?定的規則…

網絡爬蟲的詳細知識點

基本介紹 什么是網絡爬蟲 網絡爬蟲&#xff08;Web Crawler&#xff09;是一種自動化程序&#xff0c;用于從互聯網上抓取、解析和存儲網頁數據。其核心功能是模擬人類瀏覽行為&#xff0c;通過HTTP/HTTPS協議訪問目標網站&#xff0c;提取文本、鏈接、圖片或其他結構化信息&…

AndroidX中ComponentActivity與原生 Activity 的區別

一、AndroidX 與原生 Activity 的區別 1. 概念與背景 原生 Activity&#xff1a;指 Android 早期&#xff08;API 1 起&#xff09;就存在于 android.app 包下的 Activity 類&#xff08;如 android.app.Activity&#xff09;&#xff0c;是 Android 最初的 Activity 實現&…

Spring AI 使用 Elasticsearch 作為向量數據庫

前言 嗨&#xff0c;大家好&#xff0c;我是雪荷&#xff0c;最近在公司開發 AI 知識庫&#xff0c;同時學到了一些 AI 開發相關的技術&#xff0c;這期先與大家分享一下如何用 ES 當做向量數據庫。 安裝ES 第一步我們先安裝 Elasticsearch&#xff0c;這里建議 Elasticsear…

TypeScript 配置全解析:tsconfig.json、tsconfig.app.json 與 tsconfig.node.json 的深度指南

前言在現代前端和后端開發中&#xff0c;TypeScript 已經成為許多開發者的首選語言。然而&#xff0c;TypeScript 的配置文件&#xff08;特別是多個配置文件協同工作時&#xff09;常常讓開發者感到困惑。本文將深入探討 tsconfig.json、tsconfig.app.json 和 tsconfig.node.j…

讀書筆記(學會說話)

1、一個人只有會說話&#xff0c;才會有好人緣&#xff0c;做事才會順利。會說話的人容易成功。善于說話的人易成功&#xff0c;而不善說話的人往往寸步難行。我們要把話說得好聽&#xff0c;同時更要把事做得漂亮。或許一句話&#xff0c;一件事&#xff0c;就可能使人生的旅途…

私有服務器AI智能體搭建-大模型選擇優缺點、擴展性、可開發

以下是主流 AI 框架與模型的對比分析&#xff0c;涵蓋其優缺點、擴展性、可開發性等方面。 文章目錄一、AI 框架對比二、主流大模型對比三、擴展性對比總結四、可開發性對比總結五、選擇建議&#xff08;按場景&#xff09;六、未來趨勢一、AI 框架對比 框架優點缺點擴展性可開…

OpenCV直線段檢測算法類cv::line_descriptor::LSDDetector

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 該類用于實現 LSD (Line Segment Detector) 直線段檢測算法。LSD 是一種快速、準確的直線檢測方法&#xff0c;能夠在不依賴邊緣檢測的前提下直接從…

Go語言流程控制(if / for)

分支結構package mainimport ("fmt""strconv" )/* 1.順序結構 2.分支結構 3.循環結構 *//* if 條件1 {// 條件1為真時執行的代碼 } else if 條件2 {// 條件1為假但條件2為真時執行的代碼 } else {// 所有條件均為假時執行的代碼 }一種特殊的條件分支結構if…

wx小程序設置沉浸式導航文字高度問題

第一步&#xff1a;在app.json中設置"navigationStyle": "custom"第二步驟&#xff1a;文件的home.js中// pages/test/test.js Page({/*** 頁面的初始數據*/data: {statusBarHeight: 0,navBarHeight: 44 // 自定義導航內容區高度(單位px)},/*** 生命周期函…

C++算法競賽篇:DevC++ 如何進行debug調試

C算法競賽篇&#xff1a;DevC 如何進行debug調試前言一、準備工作&#xff1a;編譯生成可執行程序二、核心步驟&#xff1a;設置斷點與啟動調試1. 設置斷點2. 啟動調試模式三、調試操作&#xff1a;逐步執行與變量監控1. 逐步執行代碼2. 監控變量值變化四、調試結束前言 在算法…

語音大模型速覽(三)- cosyvoice2

CosyVoice 2: Scalable Streaming Speech Synthesis with Large Language Models 論文鏈接&#xff1a;https://arxiv.org/pdf/2412.10117代碼鏈接&#xff1a;https://github.com/FunAudioLLM/CosyVoice 一句話總結 CosyVoice 2 是一款改進的流式語音合成模型&#xff0c;其…

-lstdc++與-static-libstdc++的用法和差異

CMakeLists.txt 里寫了&#xff1a; target_link_libraries(${PROJECT_NAME} PRIVATEgccstdc ) target_link_options(${PROJECT_NAME} PRIVATE -static-libstdc)看起來像是“鏈接了兩次 C 標準庫”&#xff0c;其實它們的作用完全不同&#xff1a;1. target_link_libraries(...…

Redis學習其二(事務,SpringBoot整合,持久化RDB和AOF)

文章目錄5,事務5.1Redis 事務不保證原子性的原因5.2事務操作過程5.3監控6,SpringBoot整合Redis6.1Redis客戶端6.1.1Jedis簡單使用6.1.2Lettuce&Jedis6.2配置相關6.3使用6.3.1使用RedisTemplate6.3.2Redis工具類7,持久化RDB7.1RDB持久化原理7.2觸發機制save命令flushall命令…