1.先看隱藏。
在python中用兩個下劃線開頭的方式將屬性隱藏起來。
注意:這種只是語法的變形,在讀到有以__開的的函式時,會自動將名稱變成 」_類名__屬性」這種格式,所以在函式外部是無法通過 __屬性 找到這個屬性的。
classfoo:
__n=111111 #
將屬性隱藏起來 #在定義階段會變成 _foo__n
def__init__
(self,name):
self.
__name =name
def__f1(self): #
同理隱藏這個函式 #在定義階段會變成 _foo__f1
print('
這裡是f1')
deff2(self):
self.
__f1() #
在類內部是可以用__f1訪問到隱藏屬性的。 #在定義階段會變成 self._foo__f1
#f=foo('
yxwang
') #
例項化乙個物件。
#f.__n #在類的外部是無法通過__n的方法訪問到隱藏屬性的。
f.f2() #
會列印出「這裡是f1」,因為f2是類內部的方法,f2是可以調到隱藏屬性__f1的。
2.再來看封裝
(1)封裝資料屬性:
隱藏屬性不是目的,隱藏屬性是為了直接在內部提供乙個外部呼叫著使用的介面。這樣就可以通過這個介面對屬性實現控制。
例子:
classpeople:
def__init__
(self,name,age):
self.
__name=name
self.
__age=age
def tell_info(self): #
定義乙個返回結果的格式。
print('
《名字:%s 年齡:%s>
' %(self.__name,self.__age
))
defset_info(self,x,y):
ifnot isinstance(x,str): #
加上判斷條件,判斷使用者輸入的是不是字串型別
raise typeerror('
%s must be str
' %x) #
定義返回的錯誤。
ifnot isinstance(y,int): #
判斷使用者輸入的第二個引數 是不是數字型別。
raise typeerror('
%s must be int
' %y)
self.
__name=x
self.
__age=y
p=people('
egon
',18)
p.tell_info()
#獲取一下格式化的資料
#p.set_info('egon','19') #當第二個引數為字串的時候會報錯。 因為不匹配第二個引數為數字的條件
p.set_info('
egon
',19)
p.tell_info()
#再次獲取一下返回結果
(2)封裝函式屬性。
是為了降低複雜度,同時也提高了安全性。
比如,使用者取款,取款在程式中有 插卡 密碼認證 取款金額判斷,等等一些負責的功能。
但是對於使用者來說只需要知道取款就可以了。其餘的負責功能就可以隱藏起來了。
例子:
classatm:
def__card
(self):
print('插卡'
)
def__auth
(self):
print('
使用者認證')
def__input
(self):
print('
輸入取款金額')
def__print_bill
(self):
print('
列印賬單')
def__take_money
(self):
print('取款'
)
def withdraw(self): #
在類內部定義乙個介面,在內部呼叫上班的這些功能。使用者使用的時候只提供這個介面就可以。
self.__card
() self.
__auth
() self.
__input
() self.
__print_bill
() self.
__take_money
()a=atm()
a.withdraw()
python物件導向之封裝
在python中用雙下劃線開頭的方式將屬性隱藏起來 設定成私有的 其實這僅僅這是一種變形操作且僅僅只在類定義階段發生變形 類中所有雙下劃線開頭的名稱如 x都會在類定義時自動變形成 類名 x的形式 classa n 0 類的資料屬性就應該是共享的,但是語法上是可以把類的資料屬性設定成私有的如 n,會變...
python物件導向之封裝
封裝 1.封裝是物件導向程式設計的一大特點 2.物件導向程式設計的第一步 將屬性和方法封裝到乙個抽象的類中 3.外界使用類建立物件,然後讓物件呼叫方法 4.物件方法的細節都被封裝在類的內部 需求 1 1.小明體重75.0公斤 2.小明每次跑步都會 0.5公斤 3.小明每次吃東西體重都會增加1公斤 需...
python物件導向(二)之封裝
在程式設計中,封裝 encapsulation 是對具體物件的一種抽象,即將某些部分隱藏起來,在程式外部看不到,其含義是其他程式無法呼叫。即 封裝 就是將抽象得到的資料和行為 或功能 相結合,形成乙個有機的整體 即類 封裝的目的是增強安全性和簡化程式設計,使用者不必了解具體的實現細節,而只是要通過外...