Python知識回顧 —— 物件導向

來源:互聯網
上載者:User

標籤:com   記憶體   意義   裝飾器   儲存方式   賦值   直接   河北省   位置   

一、類的成員

  類的成員可以分為三大類:欄位、方法、屬性

註:所有成員中,只有普通欄位的內容儲存對象中,即:根據此類建立了多少對象,在記憶體中就有多少個普通欄位。而其他的成員,則都是儲存在類中,即:無論對象的多少,在記憶體中只建立一份。

  一、欄位

  欄位包括:普通欄位和靜態欄位,他們在定義和使用中有所區別,而最本質的區別是記憶體中儲存的位置不同。

    普通欄位屬於對象,靜態欄位屬於類

class Province:    # 靜態欄位    country = ‘中國‘    def __init__(self, name):        # 普通欄位        self.name = name# 直接存取普通欄位obj = Province(‘河北省‘)print obj.name# 直接存取靜態欄位Province.country

   由上述代碼可以看出,普通欄位需要通過對象來訪問,靜態欄位通過類訪問,在使用上可以看出普通欄位和靜態欄位的歸屬是不同的。其在內容的儲存方式類似如:

  

  由可知:

  • 靜態欄位在記憶體中只儲存一份,在對象中,有一個類對象指標指向類中的靜態欄位
  • 普通欄位在每個對象中都要儲存一份

  應用情境: 通過類建立對象時,如果每個對象都具有相同的欄位,那麼就使用靜態欄位。

  二、方法

  方法包括:普通方法、靜態方法和類方法,三種方法在記憶體中都歸屬於類,區別在於調用方式不同。

  • 普通方法:由對象調用;至少一個self參數;執行普通方法時,自動將調用該方法的對象賦值給self;
  • 類方法:由類調用; 至少一個cls參數;執行類方法時,自動將調用該方法的類複製給cls;
  • 靜態方法:由類調用;無預設參數;
class Foo:    def __init__(self, name):        self.name = name    def ord_func(self):        """ 定義普通方法,至少有一個self參數 """        # print self.name        print ‘普通方法‘    @classmethod    def class_func(cls):        """ 定義類方法,至少有一個cls參數 """        print ‘類方法‘    @staticmethod    def static_func():        """ 定義靜態方法 ,無預設參數"""        print ‘靜態方法‘# 調用普通方法f = Foo()f.ord_func()# 調用類方法Foo.class_func()# 調用靜態方法Foo.static_func()

  相同點:對於所有的方法而言,均屬於類(非對象)中,所以,在記憶體中也只儲存一份。

  不同點:方法調用者不同、調用方法時自動傳入的參數不同。

  三、屬性

  如果你已經瞭解Python類中的方法,那麼屬性就非常簡單了,因為Python中的屬性其實是普通方法的變種。

  對於屬性,有以下三個知識點:

  • 屬性的基本使用
  • 屬性的兩種定義方式

  1)屬性的基本使用

# ############### 定義 ###############class Foo:    def func(self):        pass    # 定義屬性    @property    def prop(self):        pass# ############### 調用 ###############foo_obj = Foo()foo_obj.func()foo_obj.prop   #調用屬性

  由屬性的定義和調用要注意一下幾點:

  • 定義時,在普通方法的基礎上添加 @property 裝飾器;
  • 定義時,屬性僅有一個self參數
  • 調用時,無需括弧
               方法:foo_obj.func()
               屬性:foo_obj.prop

  注意:屬性存在意義是:訪問屬性時可以製造出和訪問欄位完全相同的假象

             屬性由方法變種而來,如果Python中沒有屬性,方法完全可以代替其功能。

 

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.