天天看點

day17學習筆記(面向對象)面向對象

面向對象

類屬性

類中的屬性:對象屬性、類屬性(類的字段)

1)類屬性

定義在類中的變量

類屬性的值不會因為對象的不同而不同

2)對象屬性

通過 self.屬性名 = 值 定義在 init 函數中的屬性

對象屬性的值會因為對象不同而不同

對象屬性的增删改查

1.查(擷取屬性的值)

對象.屬性 - 擷取對象指定屬性的值

getattr(對象,屬性名) - 擷取對象指定屬性的值

getattr(對象,屬性名,預設值) - 擷取對象指定屬性的值,若不存在,傳回預設值

2.改、增

對象.屬性 = 值 - 屬性存在修改,不存在添加

setattr(對象,屬性名,值) - 屬性存在修改,不存在添加

3.删

del 對象.屬性 - 删除對象屬性

delattr(對象,屬性名) - 删除對象屬性

内置屬性

python在定義類的時候系統自動添加的屬性(從基類中繼承的屬性)就是内置屬性

類屬性

類.module - 擷取定義類子產品的子產品名

對象.class - 擷取對象對應的類

類.name - 擷取類的名字

類.dict - 将類轉換為字典(類屬性名作為key,類屬性值作為值)

對象.dict - 将對象轉換為字典(對象屬性名作為key,對象屬性值作為值)

類.doc - 擷取類的說明文檔

類.base - 擷取目前類的父類

類.bases - 擷取目前類的所有父類

slots = (對象屬性1,對象屬性2,…) - 限制目前類對象屬性(對象.__dict__無效)

私有化

通路權限(針對屬性和方法)

公開的:在類的内部和外部都可以使用,也能被繼承

保護的:在類的内部可以使用,外部不能使用,可以被繼承

私有的:隻能在類的内部使用,不能被繼承

python中所有的屬性和方法都是公開的,私有化其實是假的私有化

屬性和方法前加 __

getter和setter

1.getter和setter的作用

getter:擷取某個屬性前需要添加其他操作,給屬性添加getter

setter:給屬性指派前需要添加其他操作,給屬性添加setter

2.添加getter和setter

1)getter

第一步:需要添加getter的屬性名前加_

第二步:定義getter對應的函數(1.需要@property裝飾器 2.函數名就是不帶_的屬性名 3.函數傳回值)

第三部:不帶 _ 擷取屬性值

2)setter(需要與getter同時存在)

第一步:需要添加setter的屬性名前加_

第二步:定義setter對應的函數(1.需要@getter函數名.setter 裝飾器 2.函數名就是不帶_的屬性名 3.需要一個參數(嘗試指派),不需要傳回值)

第三部:raise 錯誤類型