classmyopen:
def__init__
(self,filename):
self.filename=filename
def__enter__
(self):
self.file = open(self.filename, 'r'
) data =self.file.read()
(data)
"""如果 with**塊裡面的程式沒有異常,則執行with**塊裡面的程式後,觸發__exit__, 它後面的三個引數都為none;
如果 with**塊裡面的程式發生異常, 則在發生異常的位置 觸發觸發__exit__,它後面的三個引數都不為none,分別代表著三個異常資訊
如果返回true,則代表吞掉異常,with**塊外面的程式繼續執行
如果返回false,或不返回任何資訊,則丟擲異常
"""def
__exit__
(self, exc_type, exc_val, exc_tb):
self.file.close()
print('
__exit__')
return
true
with myopen(
'config.txt
') as f:
print(6/0)
print(666)
利用描述符來限定物件屬性的型別
classtyped:
def__init__
(self,key,type):
self.key=key
self.type=type
def__get__
(self, instance, owner):
print('
__get__')
return instance.__dict__
[self.key]
def__set__
(self, instance, value):
print('
__set__')
if type(value) is
self.type:
instance.
__dict__[self.key]=value
else
:
raise typeerror('
屬性【%s】的型別必須是%s
'%(self.key,self.type))
def__delete__
(self, instance):
print('
__delete__')
del instance.__dict__
[self.key]
class
people:
name=typed('
name
',str)
age=typed('
age'
,int)
salary=typed('
salary
',float)
def__init__
(self,name,age,salary):
self.name=name
self.age=age
self.salary=salary
p=people('
jack
',23,1234)
print(p.name)
python 上下文管理協議
class open def init self,name self.name name def enter self print 出現with語句,物件的 enter 被觸發,有返回值則賦值給as宣告的變數 return self def exit self,exc type,exc val,ex...
上下文管理協議
class open def init self,name self.name name def enter self print 執行enter def exit self,exc type,exc val,exc tb print 執行exit with open a.txt as f with...
上下文協議管理
with obj as f 塊 1.with obj 觸發obj.enter 拿到返回值 2.as f f 返回值 3.with obj as f 等同於 f obj.enter 4.執行 塊 一 沒有異常的情況下,整個 塊執行完畢後去觸發 exit 它的三個引數都為none 二 有異常的情況下,從...