Python——實例屬性、類屬性、私有屬性與實例方法、類方法、靜態方法


原創聲明:本文系博主原創文章,轉載或引用請注明出處。

 

在Python中,對象的屬性分為實例屬性與類屬性;對象的方法分為普通方法、類方法與靜態方法。

 

一、屬性:

  實例屬性在每創造一個實例時都會初始化一遍,不同的實例的實例屬性可能不同;

  類屬性在創建類的時候初始化,不同實例的類屬性都相同。如果實例顯示的修改了"類屬性",則"類屬性"被實例屬性覆蓋,

  若要再次訪問或修改類屬性,則只能通過 className.propertyName 來調用;當多個實例試圖修改類屬性時可能發生資源競爭,

  必要時需要加鎖進行同步。

 

  1)實例屬性:

    實例屬性沒有規定必須在哪里定義,但是必須確保實例屬性在調用之前已經被定義,因此常見的做法是在__init__中定義。

    調用方法是: instanceName.propertyName 。

    注意,定義類時,成員方法第一個參數為self,其實self也是一個形參表示的實例。

  2)類屬性:

    在類的作用域內聲明,為類及類的所有實例共有。

    在內部用 className.propertyName 調用,如果在成員方法中不對 propertyName 進行修改,則也可以用 self.propertyName 調用;

    在外部既可以用 className.propertyName ,又可以用 instanceName.propertyName 來調用。

  3)私有屬性(方法):

    1. _xx:常用來標記私有屬性,但是外部依然可以訪問更改
    2. __xx:外部不可通過 instanceName.propertyName 來訪問或者更改,實際是解釋器將其轉化為 _className__propertyName 。
    3. __xx__:類的magic方法或解釋器使用的一些全局變量的命名規則,要避免使用這種命名規則。

 

二、方法

  1)普通類方法:

    def method(self,...):

      pass

  2)靜態方法:用@staticmethod裝飾器修飾

    不能訪問實例屬性,參數不能傳入self,若傳入self,則需要在調用時顯示給定實例。

  3)類方法:用@classmethod裝飾器修飾

    實例屬性可以覆蓋類屬性,推薦用cls作入口參數。

     

      靜態方法與類方法都可以通過類或者實例來調用。其兩個的特點都是不能夠調用實例屬性

 

【參考資料】

  1. https://www.cnblogs.com/pengsixiong/p/4823473.html

 


免責聲明!

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



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