python的包裝和授權

2022-01-16 23:05:42 字數 1912 閱讀 6831

包裝:python為大家提供了標準資料型別,以及豐富的內建方法,其實在很多場景下我們都需要基於標準資料型別來定製我們自己的資料型別,新增/改寫方法,這就用到了我們剛學的繼承/派生知識(其他的標準型別均可以通過下面的方式進行二次加工)

#

包裝(二次加工標準型別)

#繼承 + 派生 的方式實現 定製功能

2、定製新的功能

class

list(list):

if type(object) is

str:

print("

正在新增[%s]

"%object)

#

else

:

print("

必須是字串型別")

def show_midlle(self): #

取傳入值得中間字元

mid_index = int(len(self)/2)

return

self[mid_index]

f1 = list("

helloworld")

"sb")

print

(f1)

print(f1.show_midlle())

授權:授權是包裝的一個特性, 包裝一個型別通常是對已存在的型別的一些定製,這種做法可以新建,修改或刪除原有產品的功能。其它的則保持原樣。授權的過程,即是所有更新的功能都是由新類的某部分來處理,但已存在的功能就授權給物件的預設屬性。

實現授權的關鍵點就是覆蓋__getattr__方法

#

組合的方式繼承了open函式的所有特性

class

filehandle:

def__init__(self,filename,mode = "

w",encoding = "

utf-8"):

self.file = open(filename,mode,encoding=encoding)

self.mode =mode

self.encoding =encoding

def__getattr__

(self,item):

return

getattr(self.file,item)

f1 = filehandle("

a.txt")

f1.write(

"1111\n

")

#

組合的方式定製寫的方法

import

time

class

filehandle:

def__init__(self,filename,mode = "

a+",encoding = "

utf-8"):

self.file = open(filename,mode,encoding=encoding)

self.mode =mode

self.encoding =encoding

defwrite(self,len):

t = time.strftime("

%y-%m-%d %x")

self.file.write(

"%s %s

"%(t,len))

def__getattr__

(self,item):

return

getattr(self.file,item)

f1 = filehandle("

a.txt")

f1.write(

"cpu負載過高\n")

f1.write(

"記憶體剩餘不足\n")

f1.write(

"硬碟剩餘不足\n")

#在寫內容的開頭加上時間

python中“is”和“ ”的區別

最近在刷題時,有一道題需要判斷下2個字串是否相等 開始的時候,是用 is 來進行判斷的,例如a is b 但是實際執行時,發現並未得到預期的...

Python eq 和 str

在我們定義一個類的時候,常常想對一個類所例項化出來的兩個物件進行判斷這兩個物件是否是完全相同的。一般情況下,我們認為如果同一個類例項化出來的...

python globals和locals

文章裡面說globals和locals函式返回的是名稱空間 一個存有對應作用域的所有的變數 方法的字典,注意這裡和dir函式返回陣列的不一樣...