python中的面向對象編程

一. 類

在 Python 中,所有數據類型都可以視爲對象,當然也可以自定義對象,自定義的對象數據類型就是面向對象中的類(Class)。object表示該類是從哪個類繼承下來的,如果沒有合適的繼承類,就使用 object 類,這是所有類最終都會繼承的類

1.  定義一個類


注:類名後面有括號的類,稱爲新式類,括號裏面的內容是父類的名稱;程序中所有類的父類都是 object

2. 類的數據屬性


注:name,age均爲類的數據屬性;print Animals.name和print Animals.age爲訪問類的數據屬性

3. 類的方法

1>類的方法 ==== 函數

2>在類中定義的函數叫做方法

3>類的方法中,python 解釋器要求第一個形參必須是 self ;與 java 中的 this 類似

4>self 實質上是類實例化後的對象本身

5>類的實例化產生的就是對象:object;;把抽象的類創造出實際存在的事物

注:在 Python 中,實例的變量名如果以 __ 開頭,就變成了一個私有變量

二. 面向對象的特性:封裝, 繼承, 多態

1>面向對象編程——Object Oriented Programming,簡稱 OOP,把對象作爲程序的基本單元,一個對象包含了數據和操作數據的函數

2>面向過程把函數繼續切分爲子函數,來降低系統的複雜度

1. 封裝

封裝實際上是把數據封裝到某個地方,以後再去調用被封裝在某處的內容或者數據

1>封裝數據

2>調用封裝數據:通過對象直接調用;通過self間接調用


eg:

創建一個類People,擁有的方法爲砍柴,娶媳婦,回家:

實例化對象,執行相應的方法,顯示如下:

張三,18歲,男,上山去砍柴

李四,22歲,男,開車去娶媳婦

趙六,10歲,女,輟學回家

屬性:name,age,gender

方法:gohome(),kanchai(),quxifu()


注:對象可以實例化多個

附1:桟的數據結構

測試:


附2:隊列的數據結構


測試:


2. 繼承

父類和子類,又叫 基類和派生類


注:子類Dog和Cat分別繼承了父類Animals的屬性和方法,並且保留自己的屬性和方法

2.1 重新父類的構造方法

第一種:


第二種:父類名.__init__(self,形參)


第三種:super(自己類的名稱, self).__init__(形參)

優點:

<1>不需要明確告訴父類的名稱

<2>如果父類改變,只需修改class語句後面的繼承關係即可


2.2 新式類和經典類

1>python2.x裏面支持經典類和新式類

2>python3.x裏面僅支持新式類


2.3 多重繼承

新式類:

按照廣度優先算法,具體爲先在整層或者同級別搜索,再深入一層或級別搜索:A--->B(C)---D

經典類:

按照深度優先算法,具體爲先由淺到深,再返回與之開始時同一層或級別搜索:A---B--->D--->C--->D


3. 多態

當父類和子類有相同的方法時, 調用優先執行子類的方法


三. 特殊的類屬性


執行結果:


print Animals.__module__

如果類不是被導入的, 顯示爲 __main__;如果類是被 import 導入的, 則顯示類所在的模塊名


四. 類屬性


五. 實現查看類實例化對象的個數


六. 類方法和靜態方法

1. 類方法

1.1 普通方法---第一個參數必須是 self( 對象 )


1.2 類方法---第一個參數是 cls( 類 )


2. 靜態方法---不需要加特殊的第一個參數


七. property屬性

property屬性作用:

1>property可以定義一個方法名爲私有屬性的名字, 讓用戶可以訪問, 但不能修改, 保護數據的安全性

注1:在類裏邊,以雙下劃線開頭的屬性,只在類裏邊生效,外部調用不生效

注2:python 解釋器將 self.__ 屬性名間接轉換爲 self._ 類名 __ 屬性名self.__score = score


2>@屬性名.setter在給屬性賦值時, 先做判斷

eg1:

eg2:


測試:

附:私有成員和共有成員

1>私有屬性/方法: 類內部可以訪問, 對象不能訪問; 子類不能訪問, 子類的對象不能訪問

2>共有屬性/方法: 私有屬性可以訪問和不可以訪問的, 都可以訪問


3>@屬性名.deleter使用內置del刪除屬性時,自動執行的內容

附:property(fget, fset, fdel, fdoc)方法:

eg:property應用:信息分頁顯示

a.主機信息有很多, 爲了美觀, 分頁顯示

b.當用戶選擇第n頁, 顯示該頁需要的數據從哪條開始, 哪條結束

c.將start, end返回給後端, 將需要的數據響應給前端

property屬性前:


property屬性後:


八. 特殊的實例方法


注:call當調用對象時自動執行

1. 改變類的字符串顯示 __str__ 和 __repr__

功能: 簡化腳本測試和調試時的實例輸出

1>__str__ : 當打印對象時自動調用


2>__repr__ : 當在交互式環境中, 直接輸入對象時, 自動調用


3>如果 __str__ 沒有定義時, 那麼打印對象自動調用 __repr__


4>如果 __repr__ 沒有定義時


2. 自定義字符串的格式__format__


3. 索引:__getitem__ 和 __setitem__ 和 __delitem__


eg:


4. 切片: __getslice 和 __setslice__ 和 __delslice__


5. 類支持比較操作(<, <=, ==, !=, >, >=)

eg:房子與屋子



測試:


6. 迭代 __iter__


九. 元類(type)

在python中,一切皆對象; Linux下一切皆文件


注:Student 是個類, 實質上是個對象,Student 類是 type 類的一個實例化

1. 創建類


2. type動態創建類

1>type(對象)

2>type(類名, 元組方式存儲父類,屬性 )


十. with語句(語句上下文管理)


注:分析with語句底層發生了什麼?

1>調用 __enter__ 方法, 返回的是文件對象

2>將文件對象起別名爲f

3>運行完之後, 調用之前暫存 __exit__ 方法, 實現關閉文件

附:

linux使用工具:psutil

yum search python | grep devel

yum install -y python-devel.x86_64

pip install psutil

psutil應用:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章