1. 程式人生 > >Python ---封裝

Python ---封裝

公有 都是 實現 def attr 定義 靜態 error: 私有變量

廣義的封裝:把類和函數放到類裏,公有的

狹義的封裝:把一些變量和方法,隱藏起來不對外公開,私有的_名字(雙下劃線加名字)

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 ---封裝