1 ? ==,is 的使用
is 是比較兩個引用是否指向了同一個對象(引用比較)
== 是比較兩個對象是否相等
Python中的對象包含三要素:id、type、value。
其中id用來唯一標識一個對象,type標識對象的類型,value是對象的值。
is判斷的是a對象是否就是b對象,是通過id來判斷的。
==判斷的是a對象的值是否和b對象的值相等,是通過value來判斷的。
2,深拷貝,淺拷貝
淺拷貝
淺拷貝是對于一個對象的頂層拷貝
通俗的理解是:拷貝了引用,并沒有拷貝內容
深拷貝
深拷貝是對于一個對象所有層次的拷貝(遞歸)
屬性 ?propertry
1、對封裝的理解?
封裝,類本身就是一個封裝,封裝了屬性和方法。方法也是封裝,對一些業務邏輯的封裝。私有也是封裝,將一些方法和屬性私有化,對外提供可訪問的接口。
2、對繼承的理解
將共性的內容放在父類中,子類只需要關注自己特有的內容,共性的繼承過來就行了。
這樣簡化開發,符合邏輯習慣,利于擴展。
3、多態的理解
多態,一個對象在不同的情況下顯示不同的形態。在python中因為是弱類型語言,對類型沒有限定,所有python中不完全支持多態,但是多態的思想呢,python也是能體現的。
私有屬性添加getter 和 setter 方法
Python內置的@property裝飾器就是負責把一個方法變成屬性調用的:
@property的實現比較復雜,我們先考察如何使用。把一個getter方法變成屬性,只需要加上@property就可以了,此時,@property本身又創建了另一個裝飾器@score.setter,負責把一個setter方法變成屬性賦值,于是,我們就擁有一個可控的屬性操作:
注意到這個神奇的@property,我們在對實例屬性操作的時候,就知道該屬性很可能不是直接暴露的,而是通過getter和setter方法來實現的。
還可以定義只讀屬性,只定義getter方法,不定義setter方法就是一個只讀屬性:
上面的birth是可讀寫屬性,而age就是一個只讀屬性,因為age可以根據birth和當前時間計算出來。
小結:
@property廣泛應用在類的定義中,可以讓調用者寫出簡短的代碼,同時保證對參數進行必要的檢查,這樣,程序運行時就減少了出錯的可能性。