主頁 > 後端開發 > < Python全景系列-6 > 掌握Python面向物件編程的關鍵:深度探索類與物件

< Python全景系列-6 > 掌握Python面向物件編程的關鍵:深度探索類與物件

2023-05-25 07:47:53 後端開發

歡迎來到我們的系列博客《Python全景系列》!在這個系列中,我們將帶領你從Python的基礎知識開始,一步步深入到高級話題,幫助你掌握這門強大而靈活的編程語法,無論你是編程新手,還是有一定基礎的開發者,這個系列都將提供你需要的知識和技能,

Python全景系列的第六篇,本文將深入探討Python語言中的核心概念:類(Class)和物件(Object),我們將介紹這些基本概念,然后通過示例代碼詳細展示Python中的類和物件如何作業,包括定義、實體化和修改等操作,本文將幫助您更深入地理解Python中的面向物件編程(OOP),并從中提出一些不常見但很有用的技術觀點,

1. 類和物件的抽象理念

類和物件的概念是面向物件編程(OOP)的基礎,在Python中,面向物件的設計方法提供了一種封裝資料和功能的有效方式,它讓我們能將現實世界的事物和行為映射到代碼中,這種映射更加符合我們人類的認知方式,讓我們能以更自然的方式理解和設計復雜的軟體系統,

類的抽象

類是抽象的模板,用來描述具有共同屬性和方法的物件集合,一個類定義了這些物件的通用結構和行為,但它自己并不占用任何存盤空間,類是一種創建新物件的機制,為物件的創建和管理提供了一種規則和標準,

物件的物體化

相比之下,物件是類的實體,它是具體存在的,占用存盤空間,每個物件都有其自己的屬性和行為,這些屬性和行為是由其類定義的,物件的每個屬性都有一個與之相關聯的值,這個值可以在物件的生命周期內改變,而其行為則由方法來定義,

物件的唯一性

雖然一個類可能會被實體化為多個物件,但每個物件都是唯一的,即使兩個物件來自同一個類并具有相同的屬性值,它們也是不同的物件,每個物件都有一個唯一的識別符號(在Python中可以通過內置函式id()獲取),用來區分不同的物件,

類和物件的相互關系

類和物件之間的關系可以類比為藍圖和房子,或者是食譜和菜肴,類就像是藍圖或食譜,提供創建物件(房子或菜肴)的詳細說明,你可以使用同一份藍圖或食譜來創建多個房子或菜肴,就如同你可以使用同一個類來創建多個物件一樣,

獨特見解

理解類和物件的抽象理念不僅有助于我們撰寫和閱讀面向物件的代碼,也可以幫助我們更好地理解現實世界,在現實世界中,我們經常需要處理具有相似特性和行為的事物集合,就像我們在編程中處理物件一樣,

在面向物件編程中,我們將資料和操作資料的方法封裝在一起,形成“物件”,這種資料和操作的封裝使得我們可以更高效地組織和管理復雜的軟體系統,實際上,類和物件的概念引導我們看到,現實世界的許多復雜問題都可以通過抽象和封裝來簡化,從而更容易地

被理解和解決,這是一種從混亂中尋找秩序,從復雜性中尋找簡單性的方式,這也是面向物件編程在眾多編程范式中能夠獨樹一幟的重要原因,

2. 類:定義資料型別的方式

在Python中,類是一種定義新資料型別的方式,它在一個邏輯框架內封裝了資料(屬性)和操作資料的函式(方法),這個概念幫助我們建立更為復雜的資料模型,模擬現實世界中的各種物件和它們的互動方式,

類的核心特點如下:

  1. 資料封裝:類中的屬性保存了物件的狀態,這些屬性通常在__init__方法中初始化,并可以通過物件的生命周期進行訪問和修改,封裝保證了資料的完整性和一致性,

  2. 行為抽象:類中定義的方法描述了物件可以執行的操作,這些方法可以訪問和修改物件的狀態,或者與其他物件進行互動,

  3. 繼承:一個類可以繼承另一個類的屬性和方法,允許代碼重用和行為定制,這是實作多型性和代碼復用的重要機制,

  4. 多型性:由于繼承,一個類的實體可能屬于多個類,Python允許我們使用子類物件替代父類物件,提高了代碼的靈活性和可重用性,

接下來,讓我們以不同型別的作業人員為例,來看一個更復雜的類定義的例子,

class Employee:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def work(self):
        return f"{self.name} is working."

class Manager(Employee):
    def work(self):
        return f"{self.name} is managing the team."

class Developer(Employee):
    def __init__(self, name, age, programming_language):
        super().__init__(name, age)
        self.programming_language = programming_language

    def work(self):
        return f"{self.name} is writing {self.programming_language} code."

在這個例子中,我們定義了一個名為Employee的基類,以及兩個繼承自Employee的子類Manager和Developer,每個類都有一個work方法,但在不同的子類中這個方法的行為是不同的,這就是多型性的一個示例,同時,Developer類添加了一個新的屬性programming_language,展示了如何在子類中增加新的屬性,

類提供了一種高級的抽象機制,使我們能夠以更符合人類思維習慣的方式來設計和實作復雜的軟體系統,掌握類和物件的概念對理解和使用Python編程至關重要,

3. 物件:類的實體化

在Python中,一旦我們定義了一個類,我們就可以通過實體化這個類來創建一個物件,物件是類的實體,它繼承了類定義的屬性和方法,

讓我們繼續用"Dog"類來深入理解這個程序:

fido = Dog("Fido", 3)
buddy = Dog("Buddy", 5)

在這里,Dog("Fido", 3)Dog("Buddy", 5)是創建新Dog物件的運算式,它們是Dog類的兩個不同的實體,每個實體都有自己的name和age屬性,盡管fido和buddy都是Dog類的實體,但它們是兩個完全不同的物件,

你可以想象這個程序就像制作糖果,類就像是一個糖果模具,每個實體(物件)就像是用模具制作出來的糖果,雖然所有糖果都是由同一個模具制作出來的,具有相同的形狀和大小,但它們仍然是獨立的糖果,各自有自己的顏色和味道,

這就引出了Python物件的一個重要特性:每個物件都有自己的命名空間,存盤了自己的屬性,這些屬性是獨立于其他物件的,例如,我們可以這樣修改fido的age屬性,而不會影響buddy的age屬性:

fido.age = 4
print(fido.age)  # 4
print(buddy.age)  # 5

此外,物件還可以有方法,方法是定義在類中的函式,它們可以訪問和修改物件的屬性,例如,我們可以定義一個celebrate_birthday方法,用于增加Dog物件的age屬性:

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def bark(self):
        return f"{self.name} says Woof!"

    def celebrate_birthday(self):
        self.age += 1
        return f"Happy Birthday {self.name}! You are now {self.age} years old."

fido = Dog("Fido", 3)
print(fido.celebrate_birthday())  # "Happy Birthday Fido! You are now 4 years old."

總的來說,物件是類的實體,它們繼承了類的屬性和方法,每個物件都有自己的狀態(屬性)和行為(方法),在Python中,我們可以通過實體化一個類來創建一個物件,然后通過點符號.來訪問和修改物件的屬性,或者呼叫物件的方法,

4. 類的繼承:代碼的復用和擴展

在Python中,一個類可以繼承另一個類,這意味著它可以自動獲取父類的所有屬性和方法,這是面向物件編程的一個核心概念,可以幫助我們實作代碼的復用和擴展,

假設我們有一個“Animal”基類,它具有一些共享的屬性和方法,例如"name"和"age"屬性,以及一個"sound"方法,現在我們想創建兩個新類:"Dog"和"Cat",它們都應該有"name"和"age"屬性,并且都有自己的"sound"方法,

class Animal:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def sound(self):
        pass


class Dog(Animal):
    def sound(self):
        return f"{self.name} says Woof!"


class Cat(Animal):
    def sound(self):
        return f"{self.name} says Meow!"

在這個例子中,Dog和Cat類都繼承自Animal類,因此它們自動獲取了Animal類的所有屬性和方法,然后,我們在Dog和Cat類中重寫了"sound"方法,以提供各自的實作,

繼承可以使我們的代碼更加模塊化,更容易維護和擴展,我們可以把一些通用的屬性和方法放在基類中,然后在派生類中添加或重寫特定的行為,這樣,我們可以復用基類的代碼,而不必在每個派生類中重復相同的代碼,

你可以把這個程序想象成制作樂高模型,基類就像是樂高模型的基座,而派生類就像是添加在基座上的各種樂高積木,我們可以用同樣的基座制作各種不同的樂高模型,只需改變添加在上面的積木就行,這就是代碼復用的原理,

此外,Python支持多重繼承,即一個類可以繼承多個父類,這進一步增強了代碼的復用性和擴展性,但同時也帶來了一些復雜性,在使用多重繼承時,我們需要謹慎處理不同父類的屬性和方法可能會發生的沖突,

總的來說,類的繼承是一種強大的工具,它可以幫助我們復用和擴展代碼,以實作更復雜的功能,在設計類結構時,我們應該充分利用繼承的優點,同時注意避免因為過度使用繼承而帶來的問題,

5. 魔術方法:控制類的行為

Python的類可以定義一些特殊的方法,這些方法在特定的情況下會被自動呼叫,由于它們的方法名都以雙下劃線開始和結束,所以它們通常被稱為“魔術方法”或“特殊方法”,通過定義魔術方法,我們可以控制類的行為,例如實體化程序、屬性訪問、運算子多載等,

例如,當我們實體化一個類時,__init__魔術方法會被自動呼叫:

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

在這個例子中,__init__方法在Dog類的每個新實體被創建時都會運行,用于初始化新實體的狀態,

我們也可以定義其他魔術方法來實作更多的自定義行為,例如,我們可以定義__str__方法來控制當我們列印一個物件時如何顯示:

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"A dog named {self.name}, age {self.age}"

fido = Dog("Fido", 3)
print(fido)  # "A dog named Fido, age 3"

在這個例子中,當我們列印fido物件時,Python會自動呼叫其__str__方法,并將其回傳值作為列印內容,

魔術方法就像是Python類的控制面板,通過調整這個面板上的各種開關和旋鈕,我們可以精細地控制類的行為,你可以想象這個程序就像是駕駛一輛汽車,駕駛員通過操作方向盤、剎車、油門等控制器,可以精確地控制汽車的行駛方向、速度和位置,同樣,通過定義和使用魔術方法,我們可以精確地控制Python類的行為,

然而,使用魔術方法時也需要注意,一方面,過度使用魔術方法可能會使代碼變得難以理解和維護,另一方面,如果我們在子類中重寫了父類的魔術方法,可能會導致不可預見的結果,因此,使用魔術方法時,我們需要謹慎并遵循最佳實踐,

總的來說,魔術方法是Python面向物件編程的一個強大工具,它可以幫助我們自定義類的行為,實作更多的功能,在設計類時,我們應該充分利用魔術方法的優點,同時注意避免潛在的問題,

6. Python的多型性:動態型別的力量

在面向物件編程中,多型性是一種允許我們以統一的方式處理不同型別物件的特性,它可以讓我們的代碼更加靈活和可擴展,在Python中,多型性主要體現在它的動態型別系統上,

Python是一種動態型別語言,這意味著變數的型別是在運行時決定的,而不是在編譯時,這使得我們可以在不關心物件具體型別的情況下撰寫代碼,只要物件實作了預期的方法或屬性就可以,

考慮以下例子:

class Dog:
    def sound(self):
        return "Woof!"

class Cat:
    def sound(self):
        return "Meow!"

def make_sound(animal):
    return animal.sound()

fido = Dog()
whiskers = Cat()

print(make_sound(fido))  # "Woof!"
print(make_sound(whiskers))  # "Meow!"

在這個例子中,make_sound函式可以接受任何實作了sound方法的物件,無論它是Dog類的實體還是Cat類的實體,或是其他任何類的實體,這就是多型性的體現,我們的代碼不關心傳入的物件的具體型別,只關心它的行為,

你可以將這個程序想象成插座和各種電子設備,插座并不關心你插入的是電視、電腦還是吹風機,只要它們的插頭符合標準就可以,同樣,我們的make_sound函式也不關心傳入的物件的具體型別,只要它們實作了預期的sound方法就可以,這就是Python多型性的原理,

在設計類和函式時,我們應該盡可能地利用Python的多型性,我們應該關注物件的行為,而不是它們的具體型別,這樣可以讓我們的代碼更加靈活和可擴展,更容易適應需求的變化,

然而,使用多型性也需要注意一些問題,如果我們過度依賴物件的特定行為,可能會使代碼變得難以理解和維護,此外,如果傳入的物件沒有實作預期的行為,可能會導致運行時錯誤,因此,使用多型性時,我們需要謹慎并遵循最佳實踐,

總的來說,多型性是Python面向物件編程的一個強大工具,它可以幫助我們寫出更靈活、更可擴展的代碼,在設計類時,我們應該充分利用Python的多型性,同時注意避免潛在的問題,

7. 總結

Python的類和物件是理解面向物件編程的基石,類提供了一種方式來封裝資料和函式,形成一個自包含的藍圖,以此生成多個相互獨立的實體——物件,這些物件擁有類中定義的所有屬性和方法,實作資料和行為的捆綁,類的繼承提供了代碼的復用和擴展,而魔術方法則允許我們自定義類的特殊行為,Python的動態型別和多型性為編程提供了極大的靈活性,實作了對各種物件統一的處理方式,提高了代碼的可讀性和可擴展性,

如有幫助,請多關注
個人微信公眾號:【Python全視角】
TeahLead_KrisChang,10+年的互聯網和人工智能從業經驗,10年+技術和業務團隊管理經驗,同濟軟體工程本科,復旦工程管理碩士,阿里云認證云服務資深架構師,上億營收AI產品業務負責人,

***** 【第一時間獲得Python全視角更新資訊,請關注本人微信公眾號: Python全視角】 TeahLead_KrisChang,10+年的互聯網和人工智能從業經驗,10年+技術團隊和業務團隊管理經驗,同濟軟體工程本科,復旦工程管理碩士,阿里云認證云服務資深架構師,上億營收AI產品業務負責人,豐富的傳統軟體工程、互聯網軟體工程、人工智能軟體工程經驗和心得,擅長將復雜結構業務軟體服務落地、底層技術架構、工程管理、多元角色業務團隊建設、英文無障礙溝通,主流全堆疊技術均有涉獵,擅長Python/Go和Linux/Windows,致力于設計和實作最適合業務發展的軟體工程最佳實踐, *****

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/553266.html

標籤:Python

上一篇:Java設計模式-享元模式

下一篇:返回列表

標籤雲
其他(159587) Python(38166) JavaScript(25446) Java(18123) C(15231) 區塊鏈(8268) C#(7972) AI(7469) 爪哇(7425) MySQL(7208) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5340) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4576) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2433) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1976) 功能(1967) Web開發(1951) HtmlCss(1942) C++(1922) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1861) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • < Python全景系列-6 > 掌握Python面向物件編程的關鍵:深度探索類

    Python全景系列的第六篇,本文將深入探討Python語言中的核心概念:類(Class)和物件(Object)。我們將介紹這些基本概念,然后通過示例代碼詳細展示Python中的類和物件如何作業,包括定義、實體化和修改等操作。本文將幫助您更深入地理解Python中的面向物件編程(OOP),并從中提出... ......

    uj5u.com 2023-05-25 07:47:53 more
  • Java設計模式-享元模式

    # 簡介 在Java領域的軟體開發中,設計模式是提高代碼可維護性和可擴展性的重要工具。其中,享元模式是一種被廣泛使用的設計模式,它通過優化物件的重用來提升系統性能。 享元模式是一種結構型設計模式,旨在通過共享物件來減少系統中的物件數量,從而提升性能和減少記憶體消耗。在享元模式中,物件分為兩類:內部狀態 ......

    uj5u.com 2023-05-25 07:47:28 more
  • Java語法基礎

    # Java語法基礎 ## 注釋 注釋是對代碼的解釋和說明文字,可以提高程式的可讀性,因此在程式中添加必要的注釋文字十分重要。Java中的注釋分為三種: 單行注釋。單行注釋的格式是使用//,從//開始至本行結尾的文字將作為注釋文字。 ~~~java // 這是單行注釋文字 ~~~ 多行注釋。多行注釋 ......

    uj5u.com 2023-05-25 07:47:24 more
  • 【MyBatis】saveBatch 性能調優

    最近在壓測一批介面,發現介面處理速度慢的有點超出預期,感覺很奇怪,后面定位發現是資料庫批量保存這塊很慢。 這個專案用的是 mybatis-plus,批量保存直接用的是 mybatis-plus 提供的 saveBatch。 我點進去看了下原始碼,感覺有點不太對勁: 繼續追蹤了下,從這個代碼來看,確實是 ......

    uj5u.com 2023-05-25 07:41:50 more
  • minikub linux安裝

    親測好使的安裝方式親測好使的安裝方式親測好使的安裝方式親測好使的安裝方式親測好使的安裝方式親測好使的安裝方式親測好使的安裝方式親測好使的安裝方式親測好使的安裝方式親測好使的安裝方式親測好使的安裝方式親測好使的安裝方式親測好使的安裝方式親測好使的安裝方式親測好使的安裝方式親測好使的安裝方式親測好使的安 ......

    uj5u.com 2023-05-25 07:35:47 more
  • Java如何生成亂數?要不要了解一下!

    我們在學習 Java 基礎時就知道可以生成亂數,可以為我們枯燥的學習增加那么一丟丟的樂趣。本文就來介紹 Java 亂數。 ......

    uj5u.com 2023-05-25 07:35:43 more
  • Java配置執行緒池

    # 一、Java配置執行緒池 ## 1、執行緒池==分類==、其他 ### 1.1、分類 ==IO密集型 和 CPU密集型== 任務的特點不同,因此針對不同型別的任務,選擇不同型別的執行緒池可以獲得更好的性能表現。 #### 1.1. IO密集型任務 ? IO密集型任務的特點是需要頻繁讀寫磁盤、網路或者其 ......

    uj5u.com 2023-05-25 07:35:38 more
  • Spring Boot 我隨手封裝了一個萬能的 Excel 匯出工具,傳什么都能

    ## 前言 如題,這個小玩意,就是不限制你查的是哪張表,用的是什么類。 我直接一把梭,嘎嘎給你一頓匯出。 我知道,這是很多人都想過的, 至少我就收到很多人問過我這個類似的問題。 我也跟他們說了,但是他們就是不動手,其實真的很簡單。 不動手怎么辦? 我出手唄。 不多說開搞 。 ## 正文 玩法很簡單。 ......

    uj5u.com 2023-05-25 07:35:08 more
  • springboot~mybatis-plus的DynamicTableNameInnerInterceptor實

    # 超輕量級 DynamicTableNameInnerInterceptor是mybatis-plug的一個攔截器插件,可以自己定義需要攔截的表單,然后對它進行加工,這時mybatis-plus就會把SQL代碼的表名加上你的這個裝飾。 # 封裝的思想 我們通常把mybatis做成一個包,公司其它同 ......

    uj5u.com 2023-05-25 07:34:46 more
  • Netty實戰(二)

    # 一、環境準備 Netty需要的運行環境很簡單,只有2個。 - JDK 1.8+ - Apache Maven 3.3.9+ # 二、Netty 客戶端/服務器概覽 ![在這里插入圖片描述](https://img-blog.csdnimg.cn/c49191e6ee6e448f8c525b450 ......

    uj5u.com 2023-05-25 07:34:41 more