python基礎之封裝與綁定方法

封裝函數

1.什麼是封裝:spa

         封:屬性對外隱藏,但對內開放code

         裝:申請一個名稱空間,往裏裝入一系列名字/屬性對象

2.爲何要封裝:blog

         封裝數據屬性:不讓外部使用者直接使用數據,須要類內部開闢一個接口,讓外部經過接口使用數據,好處在於能夠在接口中定義各類規則接口

         封裝函數屬性:定義函數就是爲了給類外部使用者的,隱藏函數屬性是爲了避免讓外部直接使用,需內部接口,而後接口去調用隱藏的功能it

         封裝的精髓是隔離複雜度class

3.如何封裝(隱藏):在屬性前加上__開頭語法

         ①這種隱藏只是語法上的變形操做,類中__n實際上是_類名__n方法

         ②該變形只是在類定義階段發生一次

         ③這種隱藏是對外的,對內是開放的

         ④若是不想讓子類的方法覆蓋父類的,則可隱藏

 

特性:property 

將一個類的函數定義成特性之後,對象再去使用的時候obj.name,根本沒法察覺本身的name是執行了一個函數而後計算出來的,這種特性的使用方式遵循了統一訪問的原則

封裝的三種方法:

class Foo:
    def __init__(self,val):
        self.__NAME=val #將全部的數據屬性都隱藏起來

    @property      #
    def name(self):
        return self.__NAME #obj.name訪問的是self.__NAME(這也是真實值的存放位置)

    @name.setter  #
    def name(self,value):
        if not isinstance(value,str):  #在設定值以前進行類型檢查
            raise TypeError('%s must be str' %value)
        self.__NAME=value #經過類型檢查後,將值value存放到真實的位置self.__NAME

    @name.deleter  #
    def name(self):
        raise TypeError('Can not delete')

f=Foo('egon')
print(f.name)
# f.name=10 #拋出異常'TypeError: 10 must be str'
del f.name #拋出異常'TypeError: Can not delete'

 

綁定方法

         特性綁定給誰,就該誰來用,將第一個參數自動傳入

         綁定方法分爲兩類:

         ①綁定給對象用:

                  在類內部定義的函數,默認都是綁定給對象使用的

         ②綁定給類使用:

                  若類中函數被@classmethod裝飾,就是綁定給類的,類調用,自動將類做爲第一個參數傳入

         注:對象也可使用綁定給類的方法,可是自動傳入的仍是對象所屬的類

         綁定方法的精髓:自動傳值

非綁定方法:被@staticmethod裝飾

         既不與類綁定,又不與對象綁定,意味着沒有任何自動傳值的效果,是一個普通函數

應用:若函數體代碼須要用到類,則綁定給類

           若函數體代碼須要用到對象的值,則綁定給對象

           若函數體代碼既不須要用到對象的值也不須要用到類,則使用非綁定方法

相關文章
相關標籤/搜索