如何創建一個類


一。創建兩個類:

1. Person類:處理人員信息的類

2.Manager類:一個定制的Person類

 

二。實例及實例屬性:

    1. 創建實例

      

        模塊名次小寫,類名次第一個字母大寫

    2.編寫構造函數:

       2.1 統計人員的基本信息,作為實例屬性,以狀態信息保存到各個實例的命名空間里,供后續的調用。

       2.2 以__init__構造函數來實現:在創建實例的同時創建這些實例的屬性

            基本信息無默認值的方式:

             

            傳入參數name,job,pay均為類的本地變量,self.name/job/pay為實例變量

            基本信息有默認值的方式:

           

             函數的參數采用了關鍵字參數

     

     3.進行中測試:

        3.1增量原型:寫一部分代碼,測試,再寫一部分代碼,再測試

        3.2 if __name__==__main__:

             模塊是對象,並且所有的模塊都有一個內置屬性 __name__。一個模塊的 __name__ 的值取決於您如何應用模塊。如果 import

             一個模塊,那么模塊__name__ 的值通常為模塊文件名,不帶路徑或者文件擴展名。但是您也可以像一個標准的程序樣直接

             運行模塊,在這 種情況下,__name__ 的值將是一個特別缺省"__main__"

             

            在cmd 中直接運行.py文件,則__name__的值是'__main__';

            而在import 一個.py文件后,__name__的值就不是'__main__'了;

            從而用if __name__ == '__main__'來判斷是否是在直接運行該.py文件

 

            因此,此語句用於本模塊里運行並顯示調試/測試代碼的結果,但是本模塊導入到其他模塊的時候,由於此if條件為False,if下的

            測試代碼就不會運行之所以用這個if語句的具體原因如下:

              

              

 

三。添加方法:

    1. 類之外的硬編碼:

        這種方式,每個實例都需要寫一次代碼,導致代碼的冗余,同時,后期維護時,變更邏輯,需要每個實例都去

        做一一的修改,弊端很明顯。

        

 

    2. 編寫類方法:

        封裝:把操作邏輯包裝到界面之后

       

       

 

四。運算符重載:

     

    

       運行結果:

       

五。通過子類定制(擴展)方法/實例屬性:

     1. 編寫一個子類:Manager:

         

     2. 擴展:不好的方式

         

     3. 擴展:好的方式

         

     4. 擴展實例屬性:

         由於調用manager類產生的實例,他們job統一都是“mgr”,沒有必要傳參數,通過__init__的定制,

         在Manager子類直接寫死。

         

         

 

 

六。多態:

     下面的例子里由於Bob,Sue,Tom由不同的類產生的,在for循環里,調用的giveRaise方法是不同的,即所謂的“多態”。

     

 

七。使用內省工具了解類的內容及結構

     (一)概念:

      了解python對象內部運行,和處理機制的一些命令或工具

       1.類的字典屬性:__dict__及__dict__keys:

         由於類及實例的命名空間均是采用字典的模式,因此可以用上面的命令獲取類及實例的所有鍵及其值

         1.1 __dict__只顯示self的屬性,不顯示繼承類的屬性,因為類屬性還是在類里面,沒有復制到實例的命名空間

         1.2如果要顯示繼承的類屬性可以用dir()命令

         1.3 python2的版本和python3的版本顯示上會有差別,python3上顯示的更多些

      2.dir()函數:顯示類的所有屬性及實例,但不顯示屬性對應的值,即只顯示“鍵”,不顯示”值“

         

      3.用於實例的__class__,__class__.__name__:查找繼承類

      4.用於類的__bases__,__name__:查找超類

    (二)樣例:

      樣例一:里面的一些調用方法可以直接拿來用在測試里

      

       樣例二:

       

       (三)一種通用的類及實例顯示模式:

         

         

      (四)完整的Person,Manager類代碼:

            

            

            運行結果:和調用運算符重載__str__對比差異:

            

      (五)這些內省工具命名的規則:

              原則:避免和應用的類命名沖突,導致在類繼承中被覆蓋

              

八。使用文件或數據庫,使類的數據持久化        

         


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM