__getattr__是當屬性不存在的時候執行
__setattr__是設定的時候自動執行 低層實現方法self.__dict__[key]=value
__delattr__是刪除的時候自動設定 低層實現方法self.__dict__.pop(key)
補充:上面的是用點方式來使用
__getitem__
__setitem__
__delitem__都是用 來用
反射
hasattr(object,name)getattr(object,name,default) 如果查詢不到則返回default 如果沒有default 那麼如果查詢不到則報錯
setattr(object,keys,values) 可以新增也可以修改 可以新增匿名函式
delattr(object,keys)
授權:
importtime
class
open:
def__init__(self,filename,mode="
w",encoding="
utf8"):
self.file=open(filename,mode,encoding=encoding)
self.mode=mode
self.encoding=encoding
defwrite(self,name):
self.file.write(
"%s %s
" %(time.strftime("
%y-%m-%d %x
"),name))
def__getattr__
(self, item):
return
getattr(self.file,item)
f=open("
123.txt
","w")
f.write(
"123
")
__getattribute__的使用
classtest:
def__init__
(self,s):
self.s=s
def__getattr__
(self, item):
print("
輸出的是getattr")
def__getattribute__
(self, item):
print("
輸出的是getattribute")
raise attributeerror("
123"
)f=test(10)
(f.s)
#輸出的是getattribute
#輸出的是getattr
#none
無論何時都會觸發__getattribute__
__str__ 與__repr__的使用
classfoo1:
def__init__
(self,name):
self.name=name
def__repr__(self): #
與__str__一樣
return
"%s %s
" %(time.strftime("
%y/%m/%d %x
"),self.name)
#需要例項才可以,類不可以
s1=foo1("
123"
)print(s1) #
顯示的方法都是str(s1)------>s1.__str__
#2020/07/06 16:40:48 123
repr只是在cmd中使用能自動返回
而str需要print才行
析構函式 __del__
classf:
def__init__
(self,name):
self.name=name
def__del__
(self):
print("
我執行了")
f=f("
ljh"
)del
f.name
print("
_______________>")
#執行結果
#_______________>
#我執行了
class
f:
def__init__
(self,name):
self.name=name
def__del__
(self):
print("
我執行了")
f=f("
ljh"
)del
fprint("
_______________>")
#執行結果
#我執行了
#_______________>
總結:__del__()是在類結束時自動執行,而例項結束無法自動執行
迭代器協議:
classfoo:
def__init__
(self,name):
self.name=name
def__iter__
(self):
return
self
def__next__
(self):
if self.name==15:
raise attributeerror("錯誤"
) self.name+=1
return
self.name
s1=foo(10)
print(s1.__next__
())print(s1.__next__
())print(s1.__next__
())print(s1.__next__
())print(s1.__next__
())print(s1.__next__())
Python 物件導向反射及內建方法(部分)講解
反射 自省hasattr obj,屬性 obj.屬性 是否存在 getattr obj,屬性 獲取 obj.屬性 不存在則報錯 getattr obj,屬性 預設值 獲取 obj.屬性 不存在 返回 預設值 setattr obj,屬性 obj.屬性 屬性值 delattr obj,屬性 del o...
類和方法部分習題
練習17 1 在乙個時間類中實現 add time 方法,能夠列印出增加指定秒數後的時間。1 2 class time object 3 def print time self 4 print 2d 2d 2d self.hour,self.minute,self.second 5 def time...
演算法部分整理
1.pca主成分分析 主成分分析 principal component analysis,pca 是一種統計方法。通過正交變換將一組可能存在相關性的變數轉換為一組線性不相關的變數,轉換後的這組變數叫主成分。無監督的學習,往特徵量最大的特徵向量的分銷商投影 pca的主要問題 沒有考慮類別號 進行主成...