(1) 關於封裝
為什麼要封裝?
為了保護敏感/隱私屬性資料,讓外界訪問當前物件中的屬性資料時,可以按照我們指定的條件進行訪問,否則不允許訪問,提高屬性資料的安全性。
怎麼封裝?實現封裝的步驟
1. 將當前型別中所有屬性私有化。
2. 給每個屬性提供訪問屬性資料的set/get方法。
3. 給敏感屬性的訪問方法中,新增訪問限制條件。
什麼地方使用封裝?
任何出現在型別性中的屬性,都要使用封裝。【理論上】
什麼是封裝?
對屬性資料的安全保護。【官方】
零散資料的統一整理——封裝
多種相似方法的統一整理——封裝
資料的保護——封裝
案例如下:
'''
封裝的步驟:
1. 將全部屬性私有化【使用兩個下劃線開頭,描述該屬性是私有的,外界不能直接訪問】
2. 給每個屬性,提供set/get訪問方法
3. 在訪問方法中,就可以新增訪問限制,保護資料安全
'''class person:
def __init__(self,name,age):
self.__name = name
self.__age = age
def set_name(self,name):
"""給屬性設定值的方法"""
self.__name = name
def get_name(self):
"""獲取屬性值的方法"""
return self.__name
def set_age(self):
"""給屬性設定值的方法"""
#加上判斷屬性引數
if 20 <= age <=40:
self.__age =age
else:
print("輸入的年齡不合法...")
def get_age(self):
"""獲取屬性值的方法"""
return self.__age
#建立使用者物件
p = person("湯姆",21)
print(p.get_name(), p.get_age())
#修改物件的屬性資料
p.set_name("小新")
p.set_age(100)
print(p.get_name(), p.get_age())
例2
"""
關於封裝的屬性訪問
"""class person:
'''定義人的型別'''
def __init__(self,name,_age,__money):
'''定義人的屬性'''
self.name = name
self._age = _age
self.__money = __money
def set_money(self,money):
'''給屬性設定值的方法'''
self.__money = money
def get_money(self):
'''獲得屬性值的方法'''
return self.__money
#建立物件的同時並初始化資料
p = person("小新",25,100)
#此處name是為封裝屬性資料,_age為約定資料可以訪問列印,而__money為封裝函式不可直接訪問列印
print(p.name,p._age)
#1.直接 — 操作物件的屬性 — 對於物件的屬性可破壞性訪問
p.name = "大熊"
print(p.name)
#2.約定 - 約定如果乙個屬性的名稱前有乙個下劃線開頭,表示它為私有資料,不能直接操作,如:
p._age = 50
#此處_age即為私有資料
print(p._age)
#系統會提示錯誤
# access to a protected member _age of class
# 警告:這裡訪問了型別中乙個收到保護的成員屬性_age
#3. 私有化 - 型別中的屬性資料,名稱前有兩個下劃線,則屬性變為私有屬性,外界不能直接訪問
#提供訪問該私有屬性的方法為:函式set/get,前者為設定資料後者為獲取資料
print(p.get_money())
p.set_money = 1000
#此時可以訪問並更改__money屬性資料,但系統有報警
print(p.get__money())
# unresolved attribute reference __money for class person
# 在person型別中,查詢不到屬性__money
物件導向三大特徵之封裝
上半句 下半句。三流的書籍和部落格只會告訴你上半句,因為它們的作者自己也不知道下半句,而讓我們接近真理,走的更遠的是下半句。並且下半句往往非常簡單。上半句就是一些半吊子挖出的天坑,就算下半句非常簡單。因為上半句的誤導產生的阻礙,讓無數人很多年也接觸不到講述真理的下半句。時刻警醒 我們要學習的是講述真...
物件導向三大特徵之封裝
將屬性封裝起來,不讓外部直接訪問 提供getset方法訪問 package com.lv.am 資料的封裝 資料的實體類物件 除了這個商品的物件 我們還有什麼現實生活中也是這樣來定義乙個實體類 public class goods public void setname string name pu...
0808 Java物件導向特徵之封裝
一 物件導向的定義 物件 用來描述客觀事物的乙個實體,由一組屬性和方法構成 屬性 物件具有的各種特徵,每個物件的每個屬性都擁有特定值 方法 物件執行的操作 二 類圖 用於分析和設計類 三 封裝 private 將類的某些資訊隱藏在類內部,不允許外部程式直接訪問,而是通過該類提供的方法來實現對隱藏資訊...