Python面向?qū)ο缶幊?Python類與對象核心概念解析

學(xué)python必須掌握面向對象編程。類是創(chuàng)建對象的模板,對象是類的具體實(shí)例,通過class定義類,使用__init__初始化對象屬性,并可定義方法如say_hello。類的三大特性為:1.封裝:將數(shù)據(jù)與操作包裝在一起,隱藏實(shí)現(xiàn)細(xì)節(jié);2.繼承子類繼承父類的屬性和方法,減少重復(fù)代碼;3.多態(tài):不同類對同一方法有不同實(shí)現(xiàn)。變量分為實(shí)例變量(每個對象獨(dú)有)和類變量(所有實(shí)例共享)。方法分為:實(shí)例方法(操作實(shí)例數(shù)據(jù))、類方法(@classmethod,處理類級別邏輯)、靜態(tài)方法(@staticmethod,通用工具函數(shù))。合理運(yùn)用這些概念能提升代碼結(jié)構(gòu)與質(zhì)量。

Python面向?qū)ο缶幊?Python類與對象核心概念解析

學(xué)python,繞不開面向?qū)ο?/b>編程。類和對象是其中的核心概念,理解它們,才能寫出結(jié)構(gòu)清晰、易于維護(hù)的代碼。

什么是類與對象?

簡單來說,類是一個模板,對象是根據(jù)這個模板創(chuàng)建出來的具體實(shí)例。比如你可以定義一個Person類,它描述了“人”應(yīng)該有哪些屬性(如姓名、年齡)和行為(如說話、走路),然后根據(jù)這個類創(chuàng)建出不同的“人”的對象。

舉個例子:

立即學(xué)習(xí)Python免費(fèi)學(xué)習(xí)筆記(深入)”;

class Person:     def __init__(self, name, age):         self.name = name         self.age = age      def say_hello(self):         print(f"你好,我是{self.name}")

上面這段代碼定義了一個Person類,里面有初始化方法和一個打招呼的方法。之后你就可以用它來創(chuàng)建具體的對象,比如:

p1 = Person("小明", 25) p1.say_hello()

類的三大特性:封裝、繼承、多態(tài)

  • 封裝:把數(shù)據(jù)和操作這些數(shù)據(jù)的方法包裝在一起,對外隱藏實(shí)現(xiàn)細(xì)節(jié),只暴露接口。這樣可以提高安全性,也方便管理。

  • 繼承:子類可以從父類那里“繼承”屬性和方法,避免重復(fù)寫代碼。比如你可以有一個Student類繼承自Person,自動擁有名字和年齡,并添加自己的屬性如學(xué)號。

  • 多態(tài):不同類的對象對同一方法有不同的實(shí)現(xiàn)方式。比如兩個類都實(shí)現(xiàn)了draw()方法,但一個畫圓,一個畫方,調(diào)用時會根據(jù)對象類型自動選擇對應(yīng)的方法。

這三點(diǎn)是面向?qū)ο缶幊痰暮诵乃枷耄莆樟怂鼈儯湍芨玫亟M織復(fù)雜程序的結(jié)構(gòu)。

實(shí)例變量 vs 類變量

在類中,變量分為兩種:實(shí)例變量類變量

  • 實(shí)例變量屬于每個對象自己,不同對象之間互不影響。
  • 類變量屬于類本身,所有實(shí)例共享同一個類變量。

看個例子你就明白了:

class Dog:     species = "犬科動物"  # 類變量      def __init__(self, name):         self.name = name  # 實(shí)例變量  d1 = Dog("旺財(cái)") d2 = Dog("小白")  print(d1.species)  # 輸出 犬科動物 print(d2.species)  # 輸出 犬科動物

如果你修改了類變量,所有實(shí)例都會受到影響:

Dog.species = "寵物狗" print(d1.species)  # 輸出 寵物狗 print(d2.species)  # 輸出 寵物狗

這點(diǎn)要特別注意,別不小心改了類變量影響到所有實(shí)例。

靜態(tài)方法 vs 類方法 vs 實(shí)例方法

Python中有三種常見方法類型:

  • 實(shí)例方法:最常用的一種,第一個參數(shù)是self,代表當(dāng)前實(shí)例。
  • 類方法:使用@classmethod裝飾器,第一個參數(shù)是cls,代表類本身。
  • 靜態(tài)方法:使用@staticmethod裝飾器,不接收self或cls參數(shù),更像是普通函數(shù),但放在類里更合適。

什么時候用哪種?可以這么記:

  • 操作實(shí)例數(shù)據(jù) → 用實(shí)例方法
  • 修改類變量或做類級別的處理 → 用類方法
  • 工具性方法,不需要訪問類或?qū)嵗?→ 用靜態(tài)方法

比如:

class MathUtils:     @staticmethod     def add(a, b):         return a + b      @classmethod     def log_add(cls, a, b):         result = cls.add(a, b)         print(f"結(jié)果是{result}")         return result

基本上就這些了。
類和對象的概念看起來不難,但真正掌握需要多練多用。特別是在項(xiàng)目結(jié)構(gòu)設(shè)計(jì)上,合理使用繼承和封裝能大大提升代碼質(zhì)量。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊8 分享