[Python]學習基礎篇:物件導向編程

來源:互聯網
上載者:User

標籤:over   類的方法   執行   ola   list   預設   理解   流行   printf   

物件導向編程

是種具有對象概念的程式編程典範,同時也是一種程式開發的抽象方針。它可能包含資料、屬性、代碼與方法。對象則指的是類的執行個體。它將對象作為程式的基本單元,將程式和資料封裝其中,以提高軟體的重用性、靈活性和擴充性,對象裡的程式可以訪問及經常修改對象相關連的資料。在物件導向程式編程裡,電腦程式會被設計成彼此相關的對象。 
物件導向程式設計可以看作一種在程式中包含各種獨立而又互相調用的對象的思想,這與傳統的思想剛好相反:傳統的程式設計主張將程式看作一系列函數的集合,或者直接就是一系列對電腦下達的指令。物件導向程式設計中的每一個對象都應該能夠接受資料、處理資料並將資料傳達給其它對象,因此它們都可以被看作一個小型的“機器”,即對象。目前已經被證實的是,物件導向程式設計推廣了程式的靈活性和可維護性,並且在大型項目設計中廣為應用。此外,支援者聲稱物件導向程式設計要比以往的做法更加便於學習,因為它能夠讓人們更簡單地設計並維護程式,使得程式更加便於分析、設計、理解。反對者在某些領域對此予以否認。 
我們提到物件導向的時候,它不僅指一種程式設計方法。它更多意義上是一種程式開發方式。在這一方面,我們必須瞭解更多關於物件導向系統分析和物件導向設計(Object Oriented Design,簡稱OOD)方面的知識。許多流行的程式設計語言是物件導向的,它們的風格就是會透由對象來創出執行個體。

class

類:用來描述具有相同屬性和方法的對象的集合,類定義了集合中每個對象共有的屬性和方法。

  • 類的定義 
    對於類的定義,不同的語言有自己不同的定義方式,在python中類的定義比較簡單,如下: 
    格式:

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):        ....

私人方法的定義和私人屬性的定義一樣,在前面加兩個底線(__)

  • 類的專有方法 
    (1).建構函式 
    什麼是構造方法: 
    構造方法是一個特殊的沒有傳回值的方法,對象的建立就是通過構造方法來完成,其功能主要是完成對象的初始化。當類執行個體化一個對象時會自動調用構造方法。 
    格式:

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]學習基礎篇:物件導向編程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.