Python ---封裝
廣義的封裝:把類和函數放到類裏,公有的
狹義的封裝:把一些變量和方法,隱藏起來不對外公開,私有的_名字(雙下劃線加名字)
class Person:
__conutry = ‘中國‘ #私有的靜態屬性
print(Person.__country) -->AttributeError: type object ‘Person‘ has no attribute ‘__country‘
結論:私有變量只能在類的內部使用,不能在類的外部被調用
如果非要在類的外部使用類的私有屬性,需要Person._Person.__country,進行調用,但是一般不強行調用類的私有變量
在類的內部調用私有變量,__變量名的形式會發生變形----> _Person.__變量名,在屬性的前面自動添加單下劃線變量名
在類的外部不能定義一個私有變量
類的裝飾器方法:classmethod,staticmethod,property
事例:
class Circle:
def __init__(self,r,p=3.14):
self.r = r
@property
deff area(self):
return p*self.r**2
# 方法一般都是動詞,指某一類事物的動作或者技能,但是圓的面積是名詞,但是計算數據又必須寫方法,所以裝飾器可以將函數偽裝成一個屬性,通過@property實現
c1 = Circle(3)
c1.area #添加@property在調用計算面積的方法時,不需要加括號,類似於調用類的屬性,一個函數的砂上面添加property,在調用的時候就不需要添添加括號,否則會報錯
@property方法的成對出現的方法
class Goods:
def __init__(self,price,discount):
self.__price = price
self.discount = discount
@property
def price(self):
return self.__price * self.discount
@price.setter #寫這個方法的前提是,已經用property對屬性進行裝飾
def price(self,newprice):
self.__price = newprice
g = Goods(7,0.8)
print(g.price)
g.price = 10
print(g.price)
classmethod某一個類中的方法,並沒有用到類的實例中的具體屬性,而只是用到類的靜態變量,就用類方法,調用的時候直接使用類名.方法名
class Person:
Country = ‘中國人‘
@classmethod
def country(cls):
print(‘當前角色的國籍是%s‘%cls.country)
Person.country
staticmethod 方法:如果一個方法既不會用到類的屬性,也用不到實例化對象的屬性,就應該定義一個靜態方法,調用的時候直接 類名.方法名
Python ---封裝