Python3 從零單排18 封裝

2022-08-11 19:18:13 字數 3859 閱讀 6797

隱藏屬性

#

申明類時,資料屬性或者函式屬性,在屬性名稱前加上兩個下劃線,就實現了屬性隱藏,但在python裡不存在絕對的隱藏,它只是在申明的時候定義了它的呼叫方式。

class

a:

__country = "

china

"def

__def

(self):

print(self.__country

)a =a()

print(a.__country) #

報錯,這是隱藏屬性

print(a._a__country) #

對的,python裡不會絕對隱藏,只是在類命名的時候定義了新的訪問方式,需要在隱藏變數名前加 "_類名" 就可以訪問

print(a.__dict__) #

可以看到在類a的屬性字典裡有乙個kv是'_a__country': 'china',隱藏的函式屬性也一樣的道理

#當然python只是沒有絕對隱藏,但是如果加上了隱藏屬性,一般不會像上面那樣去訪問,那這個有什麼用呢?

#1.防止屬性被改寫 2.防止類內部在呼叫屬性的時候呼叫到別的類的屬性

class

a:

deffunc1(self):

print("

i am func1 from a")

def__func2

(self):

print("

i am func2 from a")

deffunc3(self):

print("

i am func3 from a")

self.func1()

#b呼叫時,這裡實際是 b.func1(),那麼他先會在b類裡找func1,所以這裡會列印("i am func1 from b")

self.__func2() #

b呼叫時,這裡實際是 b._a__func1(),那麼找到的就是a類裡的__func2,所以這裡會列印("i am func2 from a")

class

b(a):

deffunc1(self):

print("

i am func1 from b")

def__func2(self): #

這裡並不是改寫父類a的__func2,因為這裡已經變成了,_b__func2

print("

i am func2 from a")

b =b()

b.func3()

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

class

people:

def__init__

(self,name,age):

self.

__name=name

self.

__age=age

deftell_info(self):

print('

name:<%s> age:<%s>

' %(self.__name,self.__age

))

defset_info(self,name,age):

ifnot

isinstance(name,str):

print('

名字必須是字串型別')

return

ifnot

isinstance(age,int):

print('

年齡必須是數字型別')

return

self.

__name=name

self.

__age=age

p=people('

egon

',18)

#p.tell_info()

#p.set_info('egon',38)

#p.tell_info()

#p.set_info(123,38)

p.set_info('

egon

','38')

p.tell_info()

封裝方法:隔離複雜度

class

atm:

def__card

(self):

print('插卡'

)

def__auth

(self):

print('

使用者認證')

def__input

(self):

print('

輸入取款金額')

def__print_bill

(self):

print('

列印賬單')

def__take_money

(self):

print('取款'

)

defwithdraw(self):

self.

__card

() self.

__auth

() self.

__input

() self.

__print_bill

() self.

__take_money

()a =atm()

a.withdraw()

property 將函式屬性變成資料屬性,但只是像資料屬性,並不是真的資料屬性,在重新賦值的時候會報錯。
class

people:

def__init__

(self,name,weight,height):

self.name=name

self.weight=weight

self.height=height

@property

defbmi(self):

return self.weight / (self.height ** 2)

p=people('

xg',60,168)

#print(p.bmi)

#p.bmi=3333 #報錯attributeerror: can't set attribute

#但是有一些方法可以修改和刪除這些屬性。

class

a:

def__init__

(self, name):

self.

__name =name

@property

defname(self):

return self.__name

@name.setter

def name(self, name): #

修改被property裝飾的函式屬性,直接 a.name = new_name 即可

self.__name =name

@name.deleter

def name(self): #

刪除 a.name ,直接 del a.name 即可

print("

不可以刪除")

a = a("xg"

)print

(a.name)

a.name = "xg"

print

(a.name)

dela.name

print(a.name)

Python3 從零單排5 內建函式

python一些常用的內建函式及作用請見以下 lis 1,4,3,8,2,9,10,0 print all lis 判斷可迭代物件裡頭是否存在不為真的元素,如果存在不為真的元素則返回false,否則true print any lis 判斷可迭代物件裡頭是否存在為真的元素,如果存在為真的元素則返回t...

python第三次封裝 python 3 封裝

python 3 封裝 從封裝本身的意思去理解,封裝就好像是拿來乙個麻袋,把小魚,小蝦,小王八,一起裝進麻袋,然後把麻袋封上口子。照這種邏輯看,封裝 隱藏 這種理解是相當片面的。先看如何隱藏 在python中用雙下劃線開頭的方式將屬性隱藏起來 設定成私有的 其實這僅僅這是一種變形操作 類中所有雙下劃...

python3 從零單排3 函式 購買商品小程式

題目如下 商品檔案products.txt裡存的內容如下 使用者檔案user.txt裡存的內容如下 xg 管理員可以操作 1.給使用者充值,輸入使用者名稱,修改money,100000 2.新增商品 3.logout 普通使用者可以操作 1.看商品資訊 2.買東西,a.東西加products,mon...