Python學習筆記——物件導向基礎,python學習筆記
1.類和執行個體
1.1類的定義
類的定義使用class關鍵字,其後緊跟類名(通常大寫開頭),緊接著是(object),object是該類繼承的類名,沒有就繼承object類。
執行個體化時就是類名+(),有參數需要傳入參數。
class Student(object): pass
bart = Student()
類的屬性定義在_init_方法中(相當於java的構造方法),該方法的第一個參數永遠是self,在執行個體化時必須傳入相應的參數(除self外)
class Student(object): def __init__(self, name, score): self.name = name self.score = score
bart = Student('Bart Simpson', 59)
1.2方法的參數
類方法的參數第一個必須是self,而且不用傳入。其餘的參數和普通函數無異,也可以使用預設參數,可變參數和關鍵字參數。
1.3關於執行個體變數
因為python是動態語言,允許對執行個體添加新的變數,所以一個類的兩個執行個體變數個數和名稱不一定相同。
1 >>> bart = Student('Bart Simpson', 59)2 >>> lisa = Student('Lisa Simpson', 87)3 >>> bart.age = 84 >>> bart.age5 86 >>> lisa.age7 Traceback (most recent call last):8 File "<stdin>", line 1, in <module>9 AttributeError: 'Student' object has no attribute 'age'
2.訪問限制
在Python中,執行個體的變數名如果以__(雙底杠)開頭,就變成了一個私人變數(private),只有內部可以訪問,外部不能訪問。外部要擷取或更改該變數值可以通過set,get方法,set方法內部還需要進行參數檢查。此外雙底杠開頭雙底杠結尾的變數是特殊變數,變數命名時不要用這種方式命名。
1 class Student(object):2 3 def __init__(self, name, score):4 self.__name = name5 self.__score = score
3.繼承與多態
python的繼承與多態和java類似,遵循“開閉原則”:對擴充開放,對修改封閉。但python支援多重繼承,如果父類有相同的方法,調用時會從左至右搜尋,其餘部分後面專門會講。
4.擷取對象資訊
4.1 type函數:type(object),返回type類型
4.2 isinstance函數:isinstance(執行個體,類名),返回布爾值
4.3 dir函數:dir(object),返回一個包含該對象所有方法,屬性的字串list
4.4 __xxx__的屬性和方法在Python中都是有特殊用途的,例如__len__方法,下面兩種用法等價:(個人認為一種是函數寫法,一種是類方法寫法)
1 >>> len('ABC')2 33 >>> 'ABC'.__len__()4 3
4.5 getattr()、setattr()以及hasattr()函數:可以直接操作一個對象的狀態。如下所示:
1 >>> hasattr(obj, 'x') # 有屬性'x'嗎? 2 True 3 >>> obj.x 4 9 5 >>> hasattr(obj, 'y') # 有屬性'y'嗎? 6 False 7 >>> setattr(obj, 'y', 19) # 設定一個屬性'y' 8 >>> hasattr(obj, 'y') # 有屬性'y'嗎? 9 True10 >>> getattr(obj, 'y') # 擷取屬性'y'11 1912 >>> obj.y # 擷取屬性'y'13 19
可以傳入一個default參數,如果屬性不存在,就返回預設值:
1 >>> getattr(obj, 'z', 404) # 擷取屬性'z',如果不存在,返回預設值4042 404