(一)Python入門-6面向對象編程:04__del__方法(析構函數)和垃圾回收機制-__call__方法和可調用對象
阿新 • • 發佈:2019-05-12
int 例如 垃圾回收 編程 nth object () 語句 計數
一:__del__方法(析構函數)和垃圾回收機制
__del__方法稱為“析構方法”,用於實現對象被銷毀時所需的操作。比如:釋放對象 占用的資源,例如:打開的文件資源、網絡連接等。
Python實現自動的垃圾回收,當對象沒有被引用時(引用計數為 0),由垃圾回收器 調用__del__方法。
我們也可以通過del 語句刪除對象,從而保證調用__del__方法。 系統會自動提供__del__方法,一般不需要自定義析構方法。
【操作】
#析構函數 class Person: def __del__(self): print(‘銷毀對象:{0}‘.format(self)) p1 = Person() p2 = Person() del p2 #刪除對象,以保證能夠調用__del__方法 print(‘程序結束‘)
運行結果:
銷毀對象:<__main__.Person object at 0x0000026103149320>
程序結束
銷毀對象:<__main__.Person object at 0x000002610150A208>
二:__call__方法和可調用對象
定義了__call__方法的對象,稱為“可調用對象”,即該對象可以像函數一樣被調用。
【操作】
#測試__call__方法,可調用對象 class salaryAccount: ‘‘‘工資計算類‘‘‘ def __call__(self, salary): yearSalary = salary*12 daySalary = salary//30 hourSalary = daySalary//8 return dict(monthSalary=salary,yearSalary=yearSalary,daySalary=daySalary,hourSalary=hourSalary) s= salaryAccount() print(s.__call__(20000)) print(s(20000)) #可以向調用函數一樣調用對象的__call__方法
運行結果:
{‘monthSalary‘: 20000, ‘yearSalary‘: 240000, ‘daySalary‘: 666, ‘hourSalary‘: 83}
{‘monthSalary‘: 20000, ‘yearSalary‘: 240000, ‘daySalary‘: 666, ‘hourSalary‘: 83}
(一)Python入門-6面向對象編程:04__del__方法(析構函數)和垃圾回收機制-__call__方法和可調用對象