標籤:over 類的方法 執行 ola list 預設 理解 流行 printf
物件導向編程
是種具有對象概念的程式編程典範,同時也是一種程式開發的抽象方針。它可能包含資料、屬性、代碼與方法。對象則指的是類的執行個體。它將對象作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充性,對象裡的程式可以訪問及經常修改對象相關連的資料。在物件導向程式編程裡,電腦程式會被設計成彼此相關的對象。
物件導向程式設計可以看作一種在程式中包含各種獨立而又互相調用的對象的思想,這與傳統的思想剛好相反:傳統的程式設計主張將程式看作一系列函數的集合,或者直接就是一系列對電腦下達的指令。物件導向程式設計中的每一個對象都應該能夠接受資料、處理資料並將資料傳達給其它對象,因此它們都可以被看作一個小型的“機器”,即對象。目前已經被證實的是,物件導向程式設計推廣了程式的靈活性和可維護性,並且在大型項目設計中廣為應用。此外,支援者聲稱物件導向程式設計要比以往的做法更加便於學習,因為它能夠讓人們更簡單地設計並維護程式,使得程式更加便於分析、設計、理解。反對者在某些領域對此予以否認。
我們提到物件導向的時候,它不僅指一種程式設計方法。它更多意義上是一種程式開發方式。在這一方面,我們必須瞭解更多關於物件導向系統分析和物件導向設計(Object Oriented Design,簡稱OOD)方面的知識。許多流行的程式設計語言是物件導向的,它們的風格就是會透由對象來創出執行個體。
class
類:用來描述具有相同屬性和方法的對象的集合,類定義了集合中每個對象共有的屬性和方法。
class class_name(object): def func(self): pass ...
無論在java還是python中每個類都有自己的父類,一般沒有指明的情況下,定義的類預設為object的子類。
對於類的方法的定義,每個方法都需要定義一個self參數,在調用類方法時,不需要給self傳值,這個相當於java或者c++中的this指標,self區別了類方法和不同方法。
class class_name(object): __prive=2312
其實私人變數的定義格式很簡單,就是在變數前面加兩個底線(__)。
私人方法的定義:
格式:
class class_name(object): def __prive_func(self): ....
私人方法的定義和私人屬性的定義一樣,在前面加兩個底線(__)
class class_name(object): def __init__(self): ....
當一個類沒有編寫建構函式時,當建立對象時會自動調用系統預設的構造方法。
(2).解構函式
什麼是解構函式?
解構函式(destructor) 與建構函式相反,當對象結束其生命週期時(例如對象所在的函數已調用完畢),系統自動執行解構函式。解構函式往往用來做“清理善後” 的工作。
格式:
class class_name(object): def __init__(self): .... def __del__(self): ...
(3).get__score(self)函數
此函數是Python專用來訪問類的私人屬性的方法,對於類我們進行封裝,但是有時我們必須訪問類中有些私人屬性,這是在類中定義此方法可以返回私人變數。
格式:
class class_name(object): def __init__(self,name): self.__name=name def get__score(self): return self__name def __del__(self): ...
(4).set__attrs(self,bian)函數
對於私人變數我們不能通過一般方法進行方法,那麼更改私人變數的值,那麼那簡直是天方夜譚。Python為我們提供了set__attrs()方法,此方法用來在外部改變私人變數的值。
格式:
class class_name(object): def __init__(self,name): self.__name=name def get__score(self): return self__name def set__attrs(self,name): self.__name=name def __del__(self): ...
class class_name(object): def __init__(self,name): self.__name=name def get__score(self): return self__name def set__attrs(self,name): self.__name=name def __del__(self): ...bian=calss_name('python')print(bian.get__score())bian.set_attrs('java')print(bian.get__score())運行結果:pythonjava
類的特性
對於每一種物件導向編程而言,都有三大特徵封裝,繼承,多態。下來我們一一介紹。
封裝
封裝是全域作用於中的其他地區隱藏多餘資訊的原則,封裝不同於多態,多態可以讓使用者對不知道類的對象進行方法調用,而封裝可以不用關心對象是如何構建,直接使用即可
單繼承
繼承是指子類繼承父類的屬性和方法,而達到代碼公用的目的。
特點:
(1):在繼承中,基類的構造方法不會被自動調用,需要在子類的構造方法中專門調用。
(2):在調用基類的發放時需要加上基類的類名首碼,並帶上self參數變數。區別於在類中調用普通函數不需要self參數。
(3):在Python中,首先尋找對應類型的方法,如果在子類中找不到對應的方法,則在基類中一個一個尋找。
格式:class class_name(fatherclass):
如:
class man(object): def __init__(self,name,sex): self.name=name self.sex=sexclass student(man): def __init__(self,name,sex,class1): self.name=name self.sex,class1=class1此時student繼承了man這個類,man的屬性和方法student類的對象都可以調用,除了私人屬性和方法。
重寫
子類不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。
如:
class man(object): def __init__(self,name,sex): self.name=name self.sex=sex def speak(self,language): self.language=language print(language)class student(man): def __init__(self,name,class1): self.name=name self.class1=class1 def speak(self,language): #子類的speak方法重寫了基類的speak方法 printf("%s同學說的是%s",slef.name,self.language)
重載
重載是讓類以統一的方式處理不同類型資料的一種手段。是在一個類裡面,方法名字相同,而參數不同。傳回型別呢?可以相同也可以不同。
特點:
(1):可變參數類型
(2):可變參數個數
如:
class man(object): def __init__(self,name,sex): self.name=name self.sex=sex def speak(self,language): self.language=language print("%s同學說的是%s",slef.name,self.language)class student(man): def __init__(self,name,class1): self.name=name self.class1=class1 def speak(self,language,num): #重載 printf("%s同學說的是%s",slef.name,self.language)
多繼承
對於繼承,java只支援單繼承,而python支援多繼承。
注意:在python中對於多繼承,若基類中有相同的方法名,在子類使用時未指定那個基類的方法,則從繼承關係中從左至右依次尋找。
格式:
cless class_name(class1,class2,class3….)
多態
在物件導向語言中,介面的多種不同的實現方式即為多態。多態性是允許你將父物件設定成為一個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。
[Python]學習基礎篇:物件導向編程