Python 物件上下文管理協議

2022-07-11 12:27:07 字數 1777 閱讀 1662

class

myopen:

def__init__

(self,filename):

self.filename=filename

def__enter__

(self):

self.file = open(self.filename, 'r'

) data =self.file.read()

print

(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)

利用描述符來限定物件屬性的型別

class

typed:

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 二 有異常的情況下,從...