類的封裝:
針對的源碼,保護代碼的安全
狹義的封裝:私有化
廣義的封裝:把方法和屬性根據類別封裝到類中
私有化:
1:將方法私有化
def__函數名()
2.將靜態變量私有化
__靜態變量
3.將對象的屬性私有化
self.__變量=參數
注: 私有化都是在內部完成的,在內部可以調用被私有化的對象,但是在類的外部都不可以使用
私有化只是改變了被私有化的名稱,使用 對象名.__dict__ 查看名稱
self.__name 變成了 _類名__name
私有的所有內容不可以被繼承
注:
self.name 和self.__name是不同的變量可以共存
裝飾器
1 @property
如果我們定義的是普通的變量或者屬性
那么這個屬性可以從外部直接訪問
可以任意的修改 obj.attr = 123
甚至可以刪除 del obj.attr
私有化
把一個屬性加上雙下划線 __屬性名
這個屬性就連在外面看都看不見了
我們實際上有些場景允許別人看,不許改
__屬性
@property裝飾的屬性名
def 屬性():
我們允許別人看,也允許別人改,但是不能瞎改,有一些要求:數據類型 范圍
__屬性
@property裝飾的屬性名
def 屬性():return __屬性
@屬性.setter
def 屬性(self,value):
加點兒條件
修改__屬性
私有的 :通過過給__名字這樣的屬性或者方法加上當前所在類的前綴,把屬性隱藏起來了
只能在本類的內部使用,不能在類的外部使用,不能被繼承
property 把一個方法偽裝成屬性
property和私有的兩個概念一起用
定義一個私有的
再定義一個同名共有的方法,被property裝飾
@方法名.setter
@方法名.deleter
2@classmethod
類方法
1. 有些時候我們要修改的是類中的靜態變量/類變量
此時根本不會和self有任何的操作關聯
這時傳一個self參數對我們來說完全沒有用
我們希望接受的是當前我們所在的類
類方法推薦使用類名調用而不是使用對象名調用
3@staticmethod
class A:
@staticmethod # 聲明這個方法只是一個普通的不會使用任何和這個類中的變量相關的方法
def func(): # 此時 func是一個靜態方法
print('既不操作和self相關的內容')
print('也不操作和類名相關的內容')
A.func()