1.私有化 -
讓屬性和方法只能在類的內(nèi)部使用硫眯,不能在類的外部使用
注意: 本質(zhì)上,python中所有的屬性和方法都是公開择同,在類的外部可以使用也可以被繼承两入。
1)語法:
聲明屬性或者方法的時候,在屬性名或者方法名前加'__'
2)python私有化的原理
python并不能像java一樣從訪問權限上去限制屬性和方法敲才,沒有真正的私有屬性和方法裹纳。
私有化只是在兩個下劃線開頭的名字前加前綴'_類名',導致不能直接通過原名進行訪問
2.對象屬性的保護
不要直接訪問或者修改對象屬性的值择葡,而是通過屬性訪問器(getter)和修改器(setter)去操作對象屬性
需要添加getter或者setter的對象屬性,屬性命名的時候需要在最前面加'_'痊夭。
(添加'_'的目的是為了告訴使用者刁岸,這個屬性我給它添加了getter或者setter)
1)getter - 獲取屬性的值(間接)
a.語法:
@property
def 函數(shù)名(self):
其他語句
return 屬性值
b.說明:
函數(shù)名 - 對應的屬性名去掉下劃線
屬性值 - 和對應的有下劃線的屬性值有關聯(lián)
c.什么時候用
如果希望在獲取某個屬性的值之前干點別的事情,就給這個屬性添加getter
2)setter - 給屬性賦值(間接)
想要添加setter必須先添加getter
a.語法:
@getter名.setter
def 函數(shù)名(self, 參數(shù)):
其他語句
self.屬性 = 值
c.什么時候用
如果在給屬性賦值之前干點兒別的事情她我,就給這個屬性添加setter
3.類中的方法: 對象方法虹曙、類方法、靜態(tài)方法
1)對象方法
a.怎么聲明: 直接聲明在類中
b.特點: 有默認參數(shù)self番舆;調(diào)用的時候不用傳參酝碳,指向當前對象
c.怎么調(diào)用: 通過對象來調(diào)用(對象.對象方法())
d.什么時候使用: 如果實現(xiàn)函數(shù)的功能,需要使用對象屬性恨狈,就用對象方法
2)類方法
a.怎么聲明: 聲明函數(shù)前添加@classmethod裝飾器
b.特點: 有默認參數(shù)cls; 調(diào)用的時候不用傳參, 系統(tǒng)將調(diào)用這個方法的類傳給它疏哗,指向當前類
c.怎么調(diào)用: 通過類來調(diào)用
d.什么時候使用: 在不需要對象屬性的前提下,需要類的字段禾怠,就使用類方法
3)靜態(tài)方法
a.怎么聲明:聲明前添加@staticmethod裝飾器
b.特點: 沒有默認參數(shù)
c.怎么調(diào)用: 通過類來調(diào)用
d.什么時候使用: 既不需要對象屬性也不需要類的字段返奉,就使用靜態(tài)方法
4.繼承
繼承者 - 子類
被繼承者 - 父類
繼承 - 讓子類直接擁有父類的屬性和方法
1)語法:
class 類名(父類):
類的內(nèi)容
5.在子類中添加內(nèi)容
1)在子類中添加字段和方法
直接在子類中聲明新的字段和方法
2)添加對象屬性
在子類中實現(xiàn)init方法,并且添加新屬性吗氏。同時需要通過super().init()去調(diào)用父類的init方法
補充: 類中的函數(shù)的調(diào)用過程
先看當前類中是否有這個方法芽偏,如果有直接調(diào)用自己的方法;沒有就去看父類有沒有這個方法弦讽,如果有就調(diào)用父類的方法污尉;
如果父類也沒有就找父類的父類,以此類推, 如果直到找到object都沒有找到這個方法往产,才報錯被碗!
python中所有的類默認都是繼承object, object是python中所有類的基類
6.重寫
在子類中重新實現(xiàn)父類的函數(shù); 可以通過super()去調(diào)用父類中的方法仿村。
注意: super()不能在靜態(tài)方法中使用锐朴,只能在對象方法和類方法中用