面向對象
類屬性
類中的屬性:對象屬性、類屬性(類的字段)
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 錯誤類型