類的編碼基礎

一。類對象: python

     1.概念:函數

     類是有層級(樹狀)的命名空間,實例對象的工廠,產生於class語句spa

     2. 特色;3d

         2.1 class語句建立類,並把類賦值給class後面的變量名對象

         2.2 class做用域爲類屬性提供命名空間,blog

         2.3 class語句內的賦值語句,建立類屬性,這種類屬性全部實例共享繼承

               def語句建立方法,方法用於處理實例對象接口

二。實例對象:作用域

     1. 概念:數學

     程序處理的實際對象,有獨立的命名空間,產生於類的調用,每調用一次,就產生一個新的實例對象

     會繼承產生該實例對象的類對象的變量名。

     2. 特色:

         2.1 類的調用,產生實例對象,

         2.2 每一個實例對象都會繼承類的屬性,並有本身的獨立命名空間

               一開始是空的,可是會填寫來自繼承的類屬性。

         2.3 類方法的調用,第一個參數是實例本身(self),用於區分不一樣實例,及定位實例的命名空間,

              類方法的調用,會修改該實例命名空間內的數據,固然就不會修改類屬性的數值了。

三。第一個例子:

     

      

       

       

        

 

四。類的繼承和調用:

      

 

五。第二個例子:

     

     

      繼承的搜索會從實例往上走,到子類,到超類,secondclass的display方法覆蓋了超類firstclass的display的方法,

      這種從新定義,從新取代屬性的方式,叫重載

      這種定製化,重載是在firstclass外部(從新定義了一個子類)完成的,沒有修改firstclass的原代碼,以前的x,y實例的display不會受到影響

      所以類所支持的後期的擴展性和重用性比函數和模塊要好和靈活

      

      

 

          

        

六。 類是模塊的屬性:

      把類當作一個變量,模塊內對變量的全部操做,基本都適用於類。

      

       

      

       所以,類的名字最好別和模塊的名字同樣,不然容易混淆,python裏一般的作法是類名稱第一字母大寫

七。類支持python的運算符計算:運算符重載

      加法,切片,打印,點號運算

      1.以雙下劃線命名的方法是特殊的鉤子(運算符重載的標誌):這類方法是用來支持運算符計算的方法,並且是有固定的映射規則

         例如:__add__對應「+」加法運算

                 __str__對應「print」的打印命令的調用

         若是class語句裏面沒有定義__add__方法,則直接調用類或實例作加法運算,會報錯。

         __init__這個不是運算符重載,是比較特殊的一個方法,叫構造函數,主要用於實例的建立,能夠當即給實例添加屬性

         沒必要等到實例調用方法時,才往空白的實例命名空間裏添加屬性,你若是想了解某個類裏的實例屬性,能夠去看__init__

      2. 當實例出如今內置運算表達式裏,會自動調用這些方法,其返回值就是運算表達式的結果(一般是建立了一個新實例

      3. 類有幾十種運算符重載的方法,基本能知足python裏的常規計算表達式,具體須要瞭解,能夠查手冊

      4. 運算符重載方式,把類變成了python其餘內置數據類型同樣的通用,在接口調用等方面,很是便利

 

八。第三個例子

     

     

      1. a=ThirdClass('abc'),類的調用,建立實例a,同時傳參「abc」給__inti__方法,

          若是類裏有__init__方法,在類調用,建立實例時,必須按__init__方法的要求傳入參數,並在該實例建立時寫入內容

          沒有__init__方法的類,建立實例時,僅僅建立了該實例的命名空間,裏面的是空的,等後期方法的調用,纔會有寫入

      2.b=a+'xyz':加號觸發了__add__方法,傳參規則以下:

         

    3. 須要注意的地方:

        

        

         以上方法,及實例化,實際是類的一次調用,建立了一個新的實例b,纔會有如下的調用:

         

          這點和普通的 8=5+3概念同樣,8是新建立出來的常量對象

 

九。爲何要用運算符重載:

     1.數學對象裏會大量的使用運算符重載

     2.其餘狀況下比較少用到,相對比較複雜,能不用就不用吧

         

十。最簡單的class:

        

      定義了一個空類

     

      如下動態建立類屬性,實例屬性

      

      類外動態定義了兩個類的屬性,爲全部實例共享

     

      打印類屬性的值

     

      建立實例

     

     顯示實例的屬性,相同的值說明繼承於類屬性,是共享的

    

     從新定義了x實例的name屬性,覆蓋了類屬性的name,重載,x有了本身的實例屬性

 

        

     

 

     如下動態建立方法:

     

   

     

 

十一。命名空間對象和字典:

      類,實例的屬性實際是以字典的模式呈現,類樹裏只是層次只是鏈接到不一樣字典

      1.查看類,實例有哪些屬性,或者說這個命名空間字典裏有哪些鍵:用__dict__.key屬性查看

         

         

      2.查看實例鏈接着哪一個類,以便於繼承該類:__class__

         

       

      3.查看實例鏈接着哪一個類,以便於繼承該類:__bases__

         

         

 

十二。類和字典的關係:

        

             

              

相關文章
相關標籤/搜索