封裝之如何隱藏屬性
在變數名和方法名之前加雙下劃線__,外部就訪問不到;
classa:
__x =
1def
__init__
(self, name)
: self.__name = name
def__bar
(self)
:print
(self.__name)
a.__x # 外部無法訪問
這其實是在類定義的時候,將變數名和函式名進行了變形,我們可以列印類和物件的命名空間看一下變成了什麼。
classa:
__x =
1def
__init__
(self, name)
: self.__name = name
def__bar
(self)
:print
(self.__name)
print
(a.__dict__)
obj = a(
'shi'
)print
(obj.__dict__)
輸出結果:
我們可以看到,在定義類的時候,類已將將雙下劃線開頭的變數和方法自動做了變形,由__x變成_a__x。
這種變形的特點:
1.在類外部無法直接訪問變數和方法;
2.在類內部可以直接呼叫;
3.子類無法覆蓋父類__開頭的變數和方法
封裝資料屬性的目的
明確的區分內外,控制外部對隱藏屬性的操作。
class
people
:def
__init__
(self, name, age)
: self.__name = name
self.__age = age
deftell_info
(self)
:print
('<%s><%s>'
%(self.__name, self.__age)
)def
set_info
(self, name, age):if
notisinstance
(name,
str)
:print
('name必須是字串'
)return
ifnot
isinstance
(age,
int)
:print
('age必須是數字'
)return
self.__name = name
self.__age = age
p1 = people(
'shi',18
)p1.tell_info(
)p1.set_info(
'qian',12
)p1.tell_info(
)
上面**中我們就可以對外部去修改變數做一系列的控制。
封裝方法的目的
隔離複雜度
class
atm():
def__card
(self)
:print
('插卡'
)def
__auth
(self)
:print
('認證'
)def
__input
(self)
:print
('輸入金額'
)def
__take_money
(self)
:print
('取款'
)def
withdrow
(self)
: self.__card(
) self.__auth(
) self.__input(
) self.__take_money(
)a = atm(
)a.withdrow(
)
實現乙個功能,我們只需要提供乙個介面,而不需要關心內部是怎麼實現的。
封裝與可擴充套件性
呼叫者無需修改呼叫方法,而程式編寫者可以任意修改方法的邏輯
物件導向之封裝
定義 影藏事物的屬性和實現的細節,僅對外提供公共的訪問方式 封裝的好處 1.隱藏了事物的細節 2.提高了 的復用性 3.提高了安全性 封裝的實現 使用private關鍵字進行修飾,被private修飾的成員只能在本類中使用 setter和getter 封裝需要搭配set和get方法 set 設定器 ...
物件導向之 封裝
封裝 就是把屬性或者方法裝起來 廣義 把屬性和方法裝起來,外面不能直接呼叫了,要通過類的名字來呼叫 狹義 把屬性和方法藏起來,外面不能呼叫,只能在內部偷偷呼叫 class user def init self,name,passwd self.usr name self.pwd passwd 私有的...
物件導向之封裝
toc 一 封裝 1 什麼是封裝?封裝是類的三大特性,封裝就是把功能和資料整合在一起?2 為什麼要有封裝?以為封裝能讓 整合度更高 3 如何使用封裝?直接定義使用即可 在封裝的基礎上,我們可以將裝到物件或者類中的屬性隱藏起來 1 在定義類或者初始化物件時,在屬性前加 就會將該屬性隱藏起來,但是該隱藏...