本文是一篇關於Python類的學習總結,主要包括類的基礎知識、類的使用以及類的優點。若是你想弄清楚Python中的類,就趕忙接着看下去吧~
python
一、類的基礎知識數據庫
說到類,就不得不提面向過程編程和麪向對象編程。下面用1個例子說明這兩種編程方式在編碼上的區別,以下圖所示:編程
(1)在面向對象編程中最重要的概念是類(Class) 和實例(Instance) 。app
(2)類是抽象的模板,能夠將其理解爲一個基礎模板,好比Student類。而實例是根據類建立出來的一個具體對象。「物以類聚,人以羣分」, 能夠從這句話來理解編程中的類。類應該是有共同特色的事物的集合,好比人類、動物類。類中的對象應該有共同的特色,而這些特色對應編程中的類的共同屬性和方法。而具體的對象之間又或多或少有差異,好比在「鳥」這個類中,每隻鳥又有本身的特色。ide
(3)每一個對象都擁有相同的方法,但各自的數據可能不一樣。每一個對象都擁有相同的方法,實例擁有類中全部的方法;不管實例的名稱如何不一樣,他們的方法都是同樣的。好比,類是 Student, 那麼不論是實例 lilei, 仍是實例hanmeimci,只要它們都是 Student的實例,它們所擁有的方法都是相同的。每一個實例的數據可能不一樣,這是由於在使用實例時,若是須要在這個類中傳入參數做爲初始數據,那麼每一個實例可能會被傳入不一樣的數據。好比數據庫類,若是傳入的是不一樣的數據庫鏈接串,則實例的數據就不一樣了。函數
二、類的使用學習
(1)在Python中,定義類是經過class關鍵字來實現的:編碼
class Student(object):spa
Passcode
class 後面緊接着是類名,即Student.類名一般採用單詞首字母大寫的形式命名,好比 StudentCore。
(object) 表示該類是從哪一個類繼承來的。若是沒有合適的繼承類,則一般使用 object 類,這是全部類都會繼承的類。
(2)實例化一個類是經過在類名後面加小括號「()」來實現的:
pupil=Student ()
「小學生」是「學生」這個的一個實例。所謂實例,能夠將其理解爲類的化身。類不能被直接使用,只能先將其實例化,而後用實例表明類,進而調用類中的方法處理數據。那麼實例是怎麼表明類的呢?在定義類及其方法時,有一個參數叫self, 它就是串聯實例與類之間的關鍵參數,能夠簡單地理解爲「self=實例名」。
類的下面有屬性和方法。能夠將屬性理解爲靜態的數據,將方法理解爲動態的處理函數。好比,在下面的代碼中定義了「學生」類,其中_ _init_ _是屬性,print_score 是方法。
#-*-coding:utf-8-*
Class Student (object) :
def _ _ init_ _ (self,name,score) :
self.name= name
self.score=score
def print_score (self) :
print ('%s: %s'% (self. _ _name,self. _ _acore) )
(3)實例化上面的類,而後分析Python 如何利用實例化類調用類中的方法。
完整的實例化類與調用過程以下:
pupil=student (name='lilei',score=99)
pupil.print_score ()
按照前面的說法,self=實例名,那麼 pupil=Student (name='lilei',score=99) , 實例化類的第一步是執行 _ _init_ _ 語句,即 Student (self='pupil',name='lilei',score=99) , 則可知pupil.name='lilei',pupil.score=9.實例化類的第二步是執行 pupil.print_score () 語句,調用實例的方法就是調用類的方法,而這個方法是按照格式打印出
pupil.name:pupil.score,mlilei: 99。
三、類的優點
(1)類的訪問限制。
所謂類的訪問限制,即在類的外部不能直接調用類中的數據。在 Python 中,在變量前加「_ _」可將變量置爲私有變量,使其只能在類中被使用,不能被類以外的其餘函數(方法)調用。下面代碼中的name 參數表示的就是私有變量。
#-*-coding:utf-8-*-
#_ _author_ _='大嬸N72’
class Student (object) :
def _ _init_ _(self,name,score) :
self._ _name= name
self.score= score
def print_score (self) :
print ('%s: %S'% (self._ _name,self._ _score) )
MeiMei=Student ('hello', 99)
print (MeiMei.score)
print (MeiMei. _ _name)
代碼的運行結果很好地佐證了加了「_ _」的參數是不能被調用的,沒加「_ _」的參數是能夠直接被調用的,以下所示:
C:\Python36\python3. exe F:/Autotest_interface_demo/test. py
99
Traceback (most recent call last):
File "F:/Autotest interface demo/test.py」, line 12, in <module>
print (MeiMei._name)
AttributeError: ' Student' object has no attribute'__name’
Process finished with exit code 1
(2) 類的繼承。
所謂「繼承」, 從字面上看很好理解:若是一個類繼承了另一個類,則這個類就有了被繼承的類的全部方法和屬性。咱們能夠直接使用這些方法和屬性,無須再單獨寫。下面舉一個例子來解釋什麼是繼承。類的基本定義以下:
# -*- coding:utf-8 -*-
# _ _author_ _=‘大嬸N72’
# 父類
class Parent (object) :
def print_self (self) :
return 「我是父類」
# 子類繼承父類
class Student (Parent) :
def_ _init_ _ (self,name,score) :
self. _ _name= name
self.score=score
def print_score (self) :
print ('%s: %s'% (self. _ _name,self. _ _score) )
MeiMei=Student ('hello', 99)
print (MeiMei.score)
#直接在子類中使用父類的方法
print (MeiMei.print_self ()
在上面的例子中,子類 Student 繼承了父類 Parent.方法是在類名稱後面的小括號中加上父類的名稱。子類繼承了父類,則有了父類 Parent 的方法 print_self, 從而能夠直接在本身的實例名中使用。
(3)類的多態。
若是子類繼承了父類,可是又想改變父類的方法,則這時無須修改父類的方法,只須要在子類中添加相同的方法名就能夠起到覆蓋的做用,這就是多態。
# -*- coding:utf-8 -*-
# _ _author_ _='大嬸N72'
#父類
class Parent (object) :
def print_self (self) :
return"我是父類"
#子類繼承父類
class Student (Parent) :
def _ _init_ _ (self,name,score) :
self. _ _name= name
self.score=score
def print_score (self) :
print ('%s: %S'% (self. _name,self. _ _score) )
def print_self (self) :
return"我是子類"
MeiMei=Student ('hello', 99)
print (MeiMei.score)
#子類的方法覆蓋父類方法
print (MeiMei.print_self () )
以上就是Python類基礎知識學習總結,你們都弄清楚了嗎?