一、attr屬性
1.1getattr屬性
class
foo:
x=1def
__init__
(self,y)
: self.y=y
def__getattr__
(self, item)
:print
('執行__getattr__'
)f1=foo(10)
print
(f1.y)
print
(f1,
'y')
f1.aaaa #呼叫乙個物件不存在的屬性時,會自動觸發getattr
1.2delattra屬性
class
foo:
x=1def
__init__
(self,y)
: self.y=y
def__delattr__
(self, item)
:print
('刪除操作__delattr__'
)f1=foo(10)
del f1.y
print
(f1.x)
del f1.x #刪除屬性時,會觸發delattr
1.3setattr屬性
'''
'''class
foo:
x=1def
__init__
(self,y)
: self.y=y
def__setattr__
(self,key,value)
:print
('執行__setattr__'
) self.__dict__[key]
=value
f1=foo(10)
print
(f1.__dict__)
f1.z=
2#設定屬性時,會自動觸發__setattr__
print
(f1.__dict__)
二、包裝和授權
2.1包裝的概念
包裝:python為大家提供了標準資料型別,以及豐富的內建方法,其實在很多場景下我們都需要基於標準資料型別來定製我們自己的資料型別,新增/改寫方法,這就用到了我們所學的繼承/派生知識(其他的標準型別均可以通過下面的方式進行二次加工)
# 包裝(二次加工標準型別)
# 繼承 + 派生 的方式實現 定製功能
2、定製新的功能
class
list
(list):
def(self,
object):
iftype
(object)is
str:
print
("正在新增[%s]"
%object
)super()
object
)else
:print
("必須是字串型別"
)def
show_midlle
(self)
:#取傳入值得中間字元
mid_index =
int(
len(self)/2
)return self[mid_index]
f1 = list(
"helloworld"
)"sb"
)print
(f1)
2222222
)print
(f1.show_midlle(
))
2.2授權的介紹
授權:授權是包裝的乙個特性, 包裝乙個型別通常是對已存在的型別的一些定製,這種做法可以新建,修改或刪除原有產品的功能。其它的則保持原樣。授權的過程,即是所有更新的功能都是由新類的某部分來處理,但已存在的功能就授權給物件的預設屬性。
實現授權的關鍵點就是覆蓋__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"
)
jQuery屬性操作 attr
attr 方法設定或返回被選元素的屬性值。如果元素沒有相應屬性,則返回 undefined attr 有4個表示式 attr 屬性名 獲取屬性的值 attr 屬性名,屬性值 設定屬性的值 為所有匹配的元素設定乙個屬性值。attr 屬性名,函式值 設定屬性的函式值 為所有匹配的元素設定乙個計算的屬性值...
python教程閉包 python高階教程之閉包
閉包 1.函式引用 def test1 print in test1 func 呼叫函式 test1 引用函式 ret test1 print id ret print id test1 通過引用呼叫函式 ret 執行結果 in test1 func in test1 func 2.什麼是閉包 定義...
jquery屬性操作 attr 方法
attr 方法設定或返回被選元素的屬性值。根據該方法不同的引數,其工作方式也有所差異。返回被選元素的屬性值。selector attr attribute 引數 描述attribute 規定要獲取其值的屬性。檢視影象寬度 效果圖 設定被選元素的屬性和值。selector attr attribute...