Python面向對象 | 類的成員

一. 細分類的組成成員

以前我們講過類大體分兩塊區域,靜態字段部分和方法部分。python

 

每一個區域詳細劃分又能夠分爲:程序員

class A:

    company = '阿里巴巴'          # 靜態變量(靜態字段)
    __tel = '400xxxxx'              # 私有靜態變量(私有靜態字段)

    def __init__(self,name,age):             #特殊方法(初始化方法)
        self.name = name              # 對象屬性(普通字段)
        self.__age = age                  # 私有對象屬性(私有普通字段)

    def func1(self):                  # 普通方法
        pass

    def __func(self):                 #私有方法
        print(666)

    @classmethod                  # 類方法
    def class_func(cls):
        """ 定義類方法,至少有一個cls參數 """
        print('類方法')

    @staticmethod                  #靜態方法
    def static_func():
        """ 定義靜態方法 ,無默認參數"""
        print('靜態方法')

    @property                      # 屬性
    def prop(self):
        pass

 

二. 類的私有成員

對於每個類的成員而言都有兩種形式:spa

  公有成員,在任何地方都能訪問code

  私有成員,只有在類的內部才能方法對象

私有成員和公有成員的訪問限制不一樣blog

 

1. 屬性

  靜態屬性內存

  對象屬性開發

 

靜態字段(靜態屬性)源碼

  公有靜態字段:類能夠訪問;類內部能夠訪問;派生類中能夠訪問it

  私有靜態字段:僅類內部能夠訪問;

 

公有靜態屬性(字段)

class C:
    name = "公有靜態字段"

    def func(self):
        print C.name

class D(C):
    def show(self):
        print C.name

C.name             # 類訪問

obj = C()
obj.func()         # 類內部能夠訪問

obj_son = D()
obj_son.show()     # 派生類中能夠訪問

私有靜態屬性(字段)

class C:
    __name = "私有靜態字段"

    def func(self):
        print C.__name


class D(C):
    def show(self):
        print C.__name

C.__name       # 不可在外部訪問

obj = C()
obj.__name      # 不可在外部訪問
obj.func()         # 類內部能夠訪問   

obj_son = D()
obj_son.show()     #不可在派生類中能夠訪問  

公有對象屬性

class C:
    def __init__(self):
        self.foo = "公有字段"

    def func(self):
        print self.foo  # 類內部訪問


class D(C):   
    def show(self):
        print self.foo # 派生類中訪問

obj = C()

obj.foo     # 經過對象訪問
obj.func()  # 類內部訪問

obj_son = D();
obj_son.show()  # 派生類中訪問

私有對象屬性

class C:
    def __init__(self):
        self.__foo = "私有字段"

    def func(self):
        print self.foo  # 類內部訪問


class D(C):
    def show(self):
        print self.foo # 派生類中訪問

obj = C()

obj.__foo     # 經過對象訪問    ==> 錯誤
obj.func()  # 類內部訪問        ==> 正確

obj_son = D();
obj_son.show()  # 派生類中訪問  ==> 錯誤

 

2. 方法

  公有方法:對象能夠訪問;類內部能夠訪問;派生類中能夠訪問

  私有方法:僅類內部能夠訪問;

(1)公有方法

class C:
    def __init__(self):
        pass
    
    def add(self):
        print('in C')


class D(C):
    def show(self):
        print('in D')
        
    def func(self):
        self.show()
obj = D()
obj.show()  # 經過對象訪問   
obj.func()  # 類內部訪問    
obj.add()  # 派生類中訪問 

(2)私有方法

class C:
    def __init__(self):
        pass

    def __add(self):
        print('in C')


class D(C):
    def __show(self):
        print('in D')

    def func(self):
        self.__show()
obj = D()
obj.__show()  # 經過不能對象訪問
obj.func()  # 類內部能夠訪問
obj.__add()  # 派生類中不能訪問

總結:對於這些私有成員來講,他們只能在類的內部使用,不能再類的外部以及派生類中使用.

非要訪問私有成員的話,能夠經過 對象._類__屬性名,可是絕對不容許!!!爲何能夠經過._類__私有成員名訪問呢?由於類在建立時,若是遇到了私有成員(包括私有靜態字段,私有普通字段,私有方法)它會將其保存在內存時自動在前面加上_類名.

 

三. 類的其餘成員

這裏的其餘成員主要就是類方法:

方法包括:普通方法、靜態方法和類方法,三種方法在內存中都歸屬於類,區別在於調用方式不一樣。

實例方法

    定義:第一個參數必須是實例對象,該參數名通常約定爲「self」,經過它來傳遞實例的屬性和方法(也能夠傳類的屬性和方法);

    調用:只能由實例對象調用。

類方法

    定義:使用裝飾器@classmethod。第一個參數必須是當前類對象,該參數名通常約定爲「cls」,經過它來傳遞類的屬性和方法(不能傳實例的屬性和方法);

    調用:實例對象和類對象均可以調用。

靜態方法

    定義:使用裝飾器@staticmethod。參數隨意,沒有「self」和「cls」參數,可是方法體中不能使用類或實例的任何屬性和方法;

    調用:實例對象和類對象均可以調用。

 

雙下方法(後面會講到)

  定義:雙下方法是特殊方法,他是解釋器提供的 由爽下劃線加方法名加爽下劃線 __方法名__的具備特殊意義的方法,雙下方法主要是python源碼程序員使用的,

 咱們在開發中儘可能不要使用雙下方法,可是深刻研究雙下方法,更有益於咱們閱讀源碼。

 調用:不一樣的雙下方法有不一樣的觸發方式,就比如盜墓時觸發的機關同樣,不知不覺就觸發了雙下方法,例如:__init__

相關文章
相關標籤/搜索