封裝指的是將一堆屬性和方法封裝到對象中python
對象:比如一個袋子或容器,能夠存放一堆屬性和方法函數
能夠經過 「 對象. 」 的方式存取屬性或方法code
對象擁有 「.」 的機制,方便數據的存取對象
經過類來進行封裝接口
class Foo: x = 10 def func(self): print('方法') t = Foo() print(t.x) # 10 # 添加屬性 t.y = 20 print(t.y) # 20 t.func() # 方法
凡是類的內部定義的屬性或方法以__開頭的屬性或方法名,都會被限制訪問,外部不能「直接」訪問該屬性原型,內部能夠訪問get
做用:將一些隱私的數據隱藏起來,不讓外部輕易獲取,能夠經過接口將一堆數據封裝成一個接口,讓用戶經過接口進行一系列邏輯判斷最後將數據返回給用戶。原型
類裏要定義了以__開頭的要想訪問能夠經過如下方式訪問:it
_類名__屬性或方法名class
class Info: def __init__(self, name, age, ID): self.name = name self.__age = age # 本質是_Info__age self.__ID = ID # 本質是_Info__ID def paser_user(self,username,pwd): if username == 'shen' and pwd == '123': print(f'{self.name}, {self.__age}, {self.__ID}') else: print('無權限訪問') fun = Info('shen',18,3239027328) fun.paser_user('shen','123') # shen, 18, 3239027328 # 沒有__開頭的能夠直接訪問 print(fun.name) # shen # 類內部有__開頭的沒法直接訪問 # print(fun.__age) # AttributeError: 'Info' object has no attribute '__age' # 能夠經過_類名__屬性名獲取 print(fun._Info__age) # 18
class ATM: def __inster(self): print('插卡') def __pwd(self): print('輸入密碼') def __choice_money(self): print('取款金額') def __check_flow(self): print('查看流水') def withdraw(self): self.__inster() self.__pwd() self.__choice_money() self.__check_flow() st = ATM() # 外部不能直接訪問內部__開頭的方法,能夠經過封裝成一個接口訪問返回數據 st.withdraw() # 插卡 # 輸入密碼 # 取款金額 # 查看流水
property是python內置的一個裝飾器,能夠裝飾 「 在類內部的方法 」 之上將方法的調用方式由對象.方法()——>對象.方法容器
一、能夠將類中的函數 「 假裝成 」 對象的數據屬性
二、讓名詞的方法調用時更爲合理
class BIM: def __init__(self,name,height, weight): self.name = name self.height = height self.weigiht = weight # 在函數上面寫 @property def get_bim(self): print(f'{self.name}的bim是: {self.weigiht / (self.height**2)}') bim_obj = BIM('沈', 1.8, 61) bim_obj.get_bim # 沈的bim是: 18.827160493827158