Day16總結-2019/08/12

一、多繼承

python中的類支持多繼承(讓一個類同時繼承多個類)。
多繼承的時候,子類只能繼承第一個父類所有的屬性和方法,后面的父類中。
字段、方法都能繼承,對象屬性只能繼承前面那一個父類的對象屬性。

二、運算符重載

1.運算符

python中所有的類型都是類,所以所有的數據都是對象。
python中使用任意的運算符都是在調用相應的類中的相應方法,每一個運算符對應什么方法是固定的。
某種數據是否支持某個運算符操作,就看這個數據類型中是否實現了對應的方法。

2.運算符重載

運算符重載指的是在不同的類中實現同樣的運算符對應的函數。
類的對象默認情況下只支持:==,!=

    # a+b -> a.__add__(b)
    # self -> 當前類的對象,也是+前面的那個數據
    # other -> +后面的那個數據。類型根據運算規則的設計可以是任何類型的數據
    def __add__(self, other):
        return '123'

三、淺拷貝和深拷貝

1.直接賦值:

將變量中的地址直接賦值給新的變量;賦值后兩個變量的地址相同。

2.拷貝:

不管是淺拷貝還是深拷貝都會對原數據進行賦值產生新的地址。

3.淺拷貝:

字符串、列表和元組的切片;對象.copy();copy模塊中的copy方法都是淺拷貝。
淺拷貝只拷貝當前對象,不會對子對象進行拷貝。即子對象的地址元對象的地址指向同一個地址。

4.深拷貝:

copy模塊中的deepcopy方法是深拷貝。子對象(不管有幾層)的地址全部產生新的地址。

四、枚舉

1.枚舉的特點:

1.可以通過有意義的屬性名直接顯示數據。
2.每個數據的值不能修改。
3.可以做到不同數據的值唯一。

@unique         # 做到不同數據的值唯一
class PokerNum(Enum):       # 繼承Enum,讓每個數據的值不能修改,做到1,2
    pass

五、內存管理:

1.內存的開辟:

內存區間分為棧區間和堆區間;棧區間的內存自動開辟自動釋放,堆區間的內存需要手動開辟手動釋放。
但是python已經將堆區間內存的開辟和釋放自動化。

當給變量賦值的時候,系統會先在堆區間中開辟空間將數據存起來,然后再將數據在堆中的地址存到變量中,變量存在棧區間;
數字和字符串數據在開辟空間的時候,會先檢查內存中之前是否已經有過這個數據。
如果有就直接使用之前的數據,沒有才開辟新的空間保存數據。

2.內存的釋放:

棧區間:全局棧區間在程序結束后銷毀,函數棧區間在函數調用結束后銷毀。
堆區間:一個對象是否銷毀,就看這個對象的引用計數是否為0;如果一個對象的引用為0,這個對象就會銷毀(垃圾回收機制)。
注意:python中針對對象的循環引用已經做了處理。不需要寫額外的代碼來解決循環引用問題。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容