#在python中用雙下劃線,開頭的方式將屬性隱藏起來(設定成私有的)
#但其實這只是一種變形操作,而且僅僅在類定義階段會發生變形
#類中所有雙下劃線開頭的如__x都會在類定義的時候自動形成:_類名__x的形式。
class
a:
__n =0
#類的屬性就應該是共享的,但是語法上是可以把類的資料屬性設定成私有的如__n 會變成_a__n
def__init__
(self):
self.
__x = 10#
self._a__x
def__foo(self): #
_a__foo
print('
from a')
defbar(self):
self.
__foo() #
只有在類的內部才可以通過__foo的形式訪問到
print(self.__n)#
a._a__是可以訪問到的
#這種,在外部是無法通過__x這個名字訪問到的
a =a()
a.bar()
#print(a.__n)
(a._a__n)
print(a.__dict__)a.
__y = 1
print(a.__dict__)#
在繼承中父類如果不想讓子類覆蓋自己的方法,可以將方法定義
#為私有的
class
a:
deffa(self):
print('
from a')
deftest(self):
self.fa()
class
b(a):
deffa(self):
print('
from b')
b =b()
b.test()
#將fa定義成私有的即__fa
class
a:
def__fa
(self):
print('
from a')
deftest(self):
self.
__fa
()
print(self.__fa
)class
b(a):
def__fa
(self):
print('
from b')
b =b()
b.test()
#我們可以來看一下執行過程,執行test-此時self為b物件-尋找__fa方法(前面我們說過,__fa會變成_a.__fa)-
#首先咋b類中找,沒有找到,-然後在父類a中尋找-執行
#封裝的真諦在於明確地區分內外,封裝的屬性可以直接在內部使用,而不能在外部直接使用,然而定義
#屬性的目的終歸是要用,外部想要用類隱藏的屬性,需要我們為其開闢介面,
#1,封裝資料,將資料隱藏起來不是目的,隱藏起來然後提供操作該資料的介面,然後我們可以在
#介面上附加對返資料操作的限制,以此完成對資料屬性的嚴格控制
#模擬於電腦上的各種配件,就是被封裝的資料,我們可以通過操作來改變電腦硬體的配置,
#例如我們要加一塊記憶體條,只需要知道介面,頻率等引數,而不用知道記憶體條是什麼材質的,
#也不用知道記憶體條內部顆粒的構成
class
teacher:
def__init__
(self,name,age):
self.
__name =name
self.
__age =age
self.set_info(name,age)
deftell_info(self):
print('
name:%s,age:%s
' %(self.__name,self.__age
))
defset_info(self,name,age):
ifnot
isinstance(name,str):
raise typeerror("
姓名必須是字串型別")
ifnot
isinstance(age,int):
raise typeerror("
年齡必須是整數型別")
self.
__name =name
self.
__age =age
t = teacher('
wang
',21)
t.tell_info()
t.set_info(
'cong
',21)
t.tell_info()
#2,封裝方法:目的是隔離複雜度
#就像我們玩電腦一樣,我們不需要知道電腦的工作原理,只需要知道他是怎麼用的就可以了
python物件導向之封裝
在python中用雙下劃線開頭的方式將屬性隱藏起來 設定成私有的 其實這僅僅這是一種變形操作且僅僅只在類定義階段發生變形 類中所有雙下劃線開頭的名稱如 x都會在類定義時自動變形成 類名 x的形式 classa n 0 類的資料屬性就應該是共享的,但是語法上是可以把類的資料屬性設定成私有的如 n,會變...
python物件導向之封裝
封裝 1.封裝是物件導向程式設計的一大特點 2.物件導向程式設計的第一步 將屬性和方法封裝到乙個抽象的類中 3.外界使用類建立物件,然後讓物件呼叫方法 4.物件方法的細節都被封裝在類的內部 需求 1 1.小明體重75.0公斤 2.小明每次跑步都會 0.5公斤 3.小明每次吃東西體重都會增加1公斤 需...
python物件導向之 封裝
1.先看隱藏。在python中用兩個下劃線開頭的方式將屬性隱藏起來。注意 這種只是語法的變形,在讀到有以 開的的函式時,會自動將名稱變成 類名 屬性 這種格式,所以在函式外部是無法通過 屬性 找到這個屬性的。class foo n 111111 將屬性隱藏起來 在定義階段會變成 foo n def ...