類中屬性和方法的訪問限制機制
1、什么是訪問限制機制
凡是在類內部定義的屬性或方法,以__開頭的屬性或者方法名,都會被限制,外部不能 "直接訪問" 該屬性原型(這是python特有的)
PS:看起來就像是將該屬性或方法隱藏起來了
注意:凡是在類內部定義__開頭的屬性或方法,都會變形為:_類名__屬性/方法,可以通過 "物件._類名__屬性/方法" 呼叫
2、為什么要使用訪問限制機制
可以將一些隱私的資料,隱藏起來,不讓外部輕易獲取
應用場景:
可以將一些資料封裝成一個介面,可以讓用戶呼叫介面,并且通過相應的邏輯判斷或者校驗,最后再將資料回傳給用戶
3、例:訪問限制機制
例1:使用訪問機制 取資料
class Animal: # __開頭的屬性 __name = "pig" # __name變形為 _類名__name # __開頭的方法 def __run(self): print("pig is running...") # 直接訪問 # print(Animal.__name) # 報錯:AttributeError: type object 'Animal' has no attribute '__name' obj = Animal() # 物件._類名__name print(obj._Animal__name) obj._Animal__run()
執行結果:
pig pig is running...
例2:通過校驗回傳用戶資訊(用戶資訊為隱私資料)
class Animal: __name = "pig" __age = 18 __sex = "female" __ID = "418412194502301548" # def __init__(self, name, age, sex): # self.__name = name # self.__age = age # self.__sex = sex def parse_user(self, username, password): if username == "pig" and password == "123": print(f""" 通過驗證,獲取到用戶資料: 姓名:{self.__name} 年齡:{self.__age} 性別:{self.__sex} 身份ID:{self.__ID} """) else: print("校驗失敗,無法查詢用戶資訊") # __開頭的方法 def __run(self): print("pig is running...") username = input("請輸入賬號:").strip() password = input("請輸入密碼:").strip() obj = Animal() obj.parse_user(username, password)
執行結果:
# 正確結果 請輸入賬號:pig 請輸入密碼:123 通過驗證,獲取到用戶資料: 姓名:pig 年齡:18 性別:female 身份ID:418412194502301548 # 錯誤結果 請輸入賬號:pig 請輸入密碼:123456 校驗失敗,無法查詢用戶資訊
例3:將ATM取款操作按照順序封裝起來
""" ATM機取錢: 1.插卡 2.輸入密碼 3.輸入取款金額 4.出錢 5.列印流水賬單 """ class ATM: # 1.插卡 def __insert_car(self): print("插卡") # 2.輸入密碼 def __input_put(self): print("輸入密碼") # 3.輸入取款金額 def __input_balance(self): print("輸入金額") # 4.出錢 def __output_money(self): print("開始出錢") # 5.列印流水賬單 def __print_flow(self): print("列印賬單") # 取款順序規范介面,按照1-5順序進行取款操作 def withdraw(self): self.__insert_car() self.__input_put() self.__input_balance() self.__output_money() self.__print_flow() obj = ATM() obj.withdraw()
執行結果:
插卡
輸入密碼
輸入金額
開始出錢
列印賬單
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/192840.html
標籤:Python
上一篇:類的“組合”
下一篇:property內置裝飾器
