文章目錄
- 面向物件
- 類的定義
- 類的實體化
- 類的方法
- 類的特殊方法
- 類的繼承
- 類的關系
面向物件

害,說得像是我有物件一樣,
此物件非彼物件,面向物件(Object Oriented)是一種編程的思想,而不是一種編程語言,而Python也是支持面向物件的語言,
面向物件的核心是抽象、繼承、多型, 在面向物件思想中,一切皆是物件,每個物件都有它的屬性個方法,每個物件都可以通過訊息互相互動,
本文將側重Python中類和物件的使用,更多面向物件思想可參考設計模式系列博客,
類的定義
語法:
class ClassName(father class name):
<statement-1>
...
<statement-N>
- ClassName表示自定義類的名字
- father class name 是繼承父類的名字
- statement是類成員運算式,可以是屬性或方法
舉例:
class TeatA(object): # 類名TestA
value = 0 # 屬性
def printvalue(self): # 方法
print(self.value)
特別注意的是,類屬性除了在class下顯示的定義外,也能在方法中隱形的定義:
class TestB(object):
def printvalue(self):
self.value=0 # 隱形定義類屬性value
print(self.value)
類的實體化
實體化就是創建一個類的物件,定義一個類知識造出一個型別,這個型別只有實體化成物件才有真正的實用意義,
語法:直接呼叫類名,
a = TeatA() # 使用類TestA實體化一個物件a
a.printvalue() # a擁有TestA定義好的屬性和方法
b = TestB()
b.printvalue()
運行結果:

內置型別的實體化:
實際上Python任何型別都是面向物件意義上的類,所以都可以使用通用的實體化方法,

類的方法
類的方法其實就是定義在類內部的函式,只不過函式的首個引數必須是self(代表自身),類方法里面呼叫類本身的屬性和方法都必須加上self,
私有方法:私有方法(同private)就是只能被類中的其他方法呼叫,不能被類外面呼叫,通過兩個下劃線開頭來定義,私有屬性同理,


類的特殊方法
初始化函式:__init__
初始化函式是在類被實體化為物件時呼叫的函式

解構式:__del__
解構式是在物件被del操作從記憶體中卸載時所呼叫的函式

(
插播反爬資訊)博主CSDN地址:https://wzlodq.blog.csdn.net/
運算子方法:
運算子方法讓類支持加減乘除等各種運算的方法,
| 名稱 | 運算子 | 運算子方法 | 說明 |
|---|---|---|---|
| 加 | + | __add__ | 兩個物件相加 |
| 減 | - | __sub__ | 兩個物件相減 |
| 乘 | * | __mul__ | 兩個物件相乘 |
| 除 | / | __div__ | 兩個物件相除 |
| 取模 | % | __mod__ | 回傳除法的余數 |
| 左移 | << | __lshift__ | 把一個數的位元向左移一定數目 |
| 右移 | >> | __rshift__ | 把一個數的位元向右移一定數目 |
| 按位與 | & | __rand__ | 數的按位與 |
| 按位或 | | | __ror__ | 數的按位或 |
| 按位異或 | ^ | __xor__ | 數的按位異或 |
| 按位翻轉 | ~ | __invert__ | x的按位翻轉 |
| 小于 | < | __lt__ | x<y回傳x是否小于y |
| 大于 | > | __gt__ | x>y回傳x是否大于y |
| 小于等于 | <= | __le__ | x<=y回傳x是否小于等于y |
| 大于等于 | >= | __ge__ | x>=y回傳x是否大于等于y |
| 等于 | == | __eq__ | x==y比較物件是否相等 |
| 不等于 | != | __ne__ | x!=y比較兩個物件是否不想等 |
| 自身加 | += | __iadd__ | x+=y將y加到x中去 |
| 自身減 | -= | __isub__ | x-=y將y從x中減去 |
| 切片 | x[i:j] | __getlice__ | 訪問x的i到j部分z |
| 下標訪問 | x[i] | __getitem__ | 通過i下標訪問x |
只要多載了對應運算子方法,那么類就能使用對應運算子了,

類的繼承
繼承(泛化)是使一個類獲得另一個類的所有屬性和方法的能力,被繼承的類稱為父類或基類,繼承的類稱為子類或派生類,
語法:
class <name>(superclass1,superclass2,...)

多重繼承:
指一個子類繼承了好幾個父類,多重繼承頗有爭議,在C++中受人詬病,Java中用介面取代了,不過Python仍支持多重繼承,

多載:
指子類的屬性名或方法名與父類相同時,子類的會覆寫掉父類的,

多重繼承的多載:
多載不只存在于子類多載父類,害存在于多重繼承時父類間的多載,
當父類們的屬性和方法相同時,多載規則是從右向左多載,

類的關系
Python中類的關系除了上面講的繼承(泛化)外,還有依賴、關聯、聚合、組合,java有介面的話還有實作關系,
關于uml的知識,可參考一文掌握UML類圖:PlantUML實操分享
依賴:類的某個方法以被依賴的類作為其引數,

關聯:類作為另一個類的成員屬性

聚合和組合:類的實體作為另一個類的屬性,特殊的關聯,

Python系列博客持續更新中
原創不易,請勿轉載(
本不富裕的訪問量雪上加霜)
博主首頁:https://wzlodq.blog.csdn.net/
微信公眾號:唔仄lo咚鏘
如果文章對你有幫助,記得一鍵三連?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/258438.html
標籤:python
