Python 物件導向,封裝

2021-10-21 17:53:06 字數 2860 閱讀 7567

封裝來了:封裝是啥?封裝就好像把你需要的東西裝到盒子裡然後用封口膠把空封起來。照這種邏輯看,封裝=「隱藏」。

哪在python中怎麼看出來隱藏呢?

在python中用雙下劃線開頭的方式將屬性隱藏起來(設定成私有的)

類中所有雙下劃線開頭的都會自動變形成:__類名__x的形式

""

"就是把函式跟方法給封裝起來

定義裡兩個類,封裝"""

class xiaoxin:

__a=

"shimmer"

#類的資料屬性乙個是共享的,但是語法上可以是把類的資料屬性設定成私有的如_xiaoxin__a

def __foo(self):

print(

"from xiaoxin"

) def bar(self):

self.__foo(

)#只有在類的內部才能被訪問到

注意:1、這種機制也並沒有真正意義上限制我們從外部直接訪問屬性,知道了類名和屬性名就可以拼出名字:_類名__屬性,然後就可以訪問了,如a._a__n

2、變形的過程只在類的定義是發生一次,在定義後的賦值操作,不會變形

3、在繼承中,父類如果不想讓子類覆蓋自己的方法,可以將方法定義為私有的

#一:封裝資料屬性:明確的區分內外,控制外部對隱藏的屬性的操作行為

class  people:

def __init__(self,name,age):

self.__name=name

self.__age=age

def tell_info(self):

print(

"name: %s,age: %s"%(self.__name,self.__age))

def set_info(self,name,age):

if not isinstance(name,str):

print(

"姓名需要為字串型別!!!"

)if not isinstance(age,int):

print(

"年齡需要為整型!!!"

) self.__name=name

self.__age=age

p=people(

"shimmer",21)

p.tell_info(

)p.set_info(

"egon",38)

p.set_info(38,"egon"

)p.set_info(111,222)

#二、 封裝方法:隔離複雜度

class atm:

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.withdr

3:封裝也能體現物件導向的可擴充套件性高這一點

""

"定義乙個房類:有長寬高,擁有者,型別"""

class room:

def __init__(self,name,owner,length,width,height):

self.name=name

self.owner=owner

self.__length=length

self.__width=width

self.__height=height

def area(self):#對外提供的介面,隱藏了內部的實現細節,此時我們想求的是面積

res=self.__length*self.__width*self.__height

print(res)

def info(self):

print(

"房子型別:%s"%self.name)

d=room(

"兩房一廳","shimmer",10,20,10)

d.area(

)#使用者呼叫介面

d.info(

)

直接從內部定義函式方法,給外部提供介面進行訪問。

封裝在於明確區分內外,使得類實現者可以修改封裝內的東西而不影響外部呼叫者的**;而外部使用用者只知道乙個介面(函式),只要介面(函式)名、引數不變,使用者的**永遠無需改變。這就提供乙個良好的合作基礎——或者說,只要介面這個基礎約定不變,則**改變不足為慮。

python 物件導向 封裝

1.私有屬性 class person object def init self,name,age self.name name self.age age 例項屬性 self.attack val 30self.life val 100 前面加兩個下劃線就是私有變數,私有屬性 a person wd...

Python物件導向04 物件導向封裝案例

封裝是物件導向程式設計的一大特點 物件導向程式設計的第一步 將屬性和方法封裝到乙個抽象的類中 外界使用類建立物件,然後讓物件呼叫方法物件方法的細節都被封裝在類的內部需求 小明體重75.0公斤 小明每次跑步會 0.5公斤 小明每次吃東西體重增加1公斤 class person 人類 def init ...

Python物件導向05 物件導向封裝案例 II

封裝 封裝是物件導向程式設計的一大特點 物件導向程式設計的第一步 將屬性和方法封裝到乙個抽象的類中 外界使用類建立物件,然後讓物件呼叫方法物件方法的細節都被封裝在類的內部乙個物件的屬性可以是另外乙個類建立的物件 需求 士兵許三多有一把ak47士兵可以 槍能夠發射子彈 槍裝填裝填子彈 增加子彈數量sh...