天天看點

python完全支援面向對象程式設計_python入門——Python中面向對象程式設計

python大資料課堂已經開始了。想轉行大資料,資料挖掘,機器學習,人工智能的小夥伴可以關注啦。上一篇帶大家了解了python中的異常處理。今天我們來繼續了解python中的面向對象程式設計。調試環境以python3.6環境為例。需要代碼和demo的朋友可以搜尋“栾鵬全棧”到我的CSDN部落格。

python完全支援面向對象程式設計_python入門——Python中面向對象程式設計

第十部分. Python中面向對象程式設計

10、Python中面向對象程式設計

10.1、面向對象技術簡介

類(Class):用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的執行個體。

類變量:類變量在整個執行個體化的對象中是公用的。類變量定義在類中且在函數體之外。類變量通常不作為執行個體變量使用。

資料成員:類變量或者執行個體變量用于處理類及其執行個體對象的相關的資料。

方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進行改寫,這個過程叫方法的覆寫(override),也稱為方法的重寫。

執行個體變量:定義在方法中的變量,隻作用于目前執行個體的類。

繼承:即一個派生類(derived class)繼承基類(base class)的字段和方法。繼承也允許把一個派生類的對象作為一個基類對象對待。例如,有這樣一個設計:一個Dog類型的對象派生自Animal類,這是模拟"是一個(is-a)"關系(例圖,Dog是一個Animal)。

執行個體化:建立一個類的執行個體,類的具體對象。

方法:類中定義的函數。

對象:通過類定義的資料結構執行個體。對象包括兩個資料成員(類變量和執行個體變量)和方法。

10.2、建立類

python完全支援面向對象程式設計_python入門——Python中面向對象程式設計

empCount變量是一個類變量,它的值将在這個類的所有執行個體之間共享。你可以在内部類或外部類使用 Employee.empCount通路。

第一種方法__init__()方法是一種特殊的方法,被稱為類的構造函數或初始化方法,當建立了這個類的執行個體時就會調用該方法

self代表類的執行個體,self在定義類的方法時是必須有的,雖然在調用時不必傳入相應的參數。Self代表了一件事情,那就是:類的方法與普通的函數隻有一個特别的差別——它們必須有一個額外的第一個參數名稱,按照慣例它的名稱是 self。

10.3、建立執行個體對象

執行個體化類其他程式設計語言中一般用關鍵字 new,但是在 Python中并沒有這個關鍵字,類的執行個體化類似函數調用方式。

以下使用類的名稱Employee 來執行個體化,并通過 __init__ 方法接受參數。

python完全支援面向對象程式設計_python入門——Python中面向對象程式設計

10.4、操作對象屬性

下面是讀取對象屬性的執行個體:

python完全支援面向對象程式設計_python入門——Python中面向對象程式設計

以下函數還可以對屬性進行讀取之外的操作:

· getattr(obj,name[, default]) :通路對象的屬性。

· hasattr(obj,name):檢查是否存在一個屬性。

· setattr(obj,name,value):設定一個屬性。如果屬性不存在,會建立一個新屬性。

· delattr(obj,name) :删除屬性。

10.5、Python内置的類屬性

· __dict__ :類的屬性(包含一個字典,由類的資料屬性組成)

· __doc__ :類的文檔字元串

· __name__:類名

· __module__:類定義所在的子產品(類的全名是'__main__.className',如果類位于一個導入子產品mymod中,那麼className.__module__ 等于 mymod)

· __bases__ :類的所有父類構成元素(包含了一個由所有父類組成的元組)

10.6、類的繼承

面向對象的程式設計帶來的主要好處之一是代碼的重用,實作這種重用的方法之一是通過繼承機制。繼承完全可以了解成類之間的類型和子類型關系。

在python中繼承中的一些特點:

1:在繼承中基類的構造(__init__()方法)不會被自動調用,它需要在其派生類的構造中親自專門調用。

2:在調用基類的方法時,需要加上基類的類名字首,且需要帶上self參數變量。差別于在類中調用普通函數時并不需要帶上self參數

3:Python總是首先查找對應類型的方法,如果它不能在派生類中找到對應的方法,它才開始到基類中逐個查找。(先在本類中查找調用的方法,找不到才去基類中找)。

如果在繼承元組中列了一個以上的類,那麼它就被稱作"多重繼承" 。

python完全支援面向對象程式設計_python入門——Python中面向對象程式設計

10.7、運算符重載

Python同樣支援運算符重載,執行個體如下:

python完全支援面向對象程式設計_python入門——Python中面向對象程式設計

以上代碼執行結果如下所示:

10.8、類的私有屬性及方法

1)類的私有屬性

__private_attrs:兩個下劃線開頭,聲明該屬性為私有,不能在類的外部被使用或直接通路。在類内部的方法中使用是self.__private_attrs。

2)類的私有方法

__private_method:兩個下劃線開頭,聲明該方法為私有方法,不能在類地外部調用。在類的内部調用self.__private_methods

3)執行個體

python完全支援面向對象程式設計_python入門——Python中面向對象程式設計

10.9、下劃線、雙下劃線、頭尾雙下劃線說明:

· __foo__:定義的是特列方法,類似__init__()之類的。

· _foo:以單下劃線開頭的表示的是 protected類型的變量,即保護類型隻能允許其本身與子類進行通路,不能用于from module import *

· __foo:雙下劃線的表示的是私有類型(private)的變量,隻能是允許這個類本身進行通路了。

下節預告——正規表達式