一、__str__方法
示例代碼:
1 class People: 2 def __init__(self, name, age): 3 self.name = name 4 self.age = age 5 6 def __str__(self): 7 print('=====>str') 8 9 obj = People('egon', 88)
實例化不會觸發__str__方法,但是打印的話就會觸發,如下:
1 class People: 2 def __init__(self, name, age): 3 self.name = name 4 self.age = age 5 6 def __str__(self): 7 print('=====>str') 8 9 obj = People('egon', 88) 10 print(obj) 11 12 結果為: 13 14 Traceback (most recent call last): 15 =====>str 16 File "C:/Users/xu516/PycharmProjects/Python全棧開發/第三模塊/面向對象編程/25 內置方法.py", line 61, in <module> 17 print(obj) 18 TypeError: __str__ returned non-string (type NoneType)
執行了,但是TypeError,我們return一個字符串就可以了,如:
1 return '<name:%s, age:%s> ' % (self.name, self.age) 2 3 結果為: 4 5 <name:egon, age:88>
二、__del__方法
實例代碼如下:
1 f = open('屬性查找.py', encoding='utf-8') 2 f.read() 3 4 f.close() # 回收操作系統的資源 5 6 print(f) 7 f.read() 8 9 結果為: 10 11 Traceback (most recent call last): 12 <_io.TextIOWrapper name='屬性查找.py' mode='r' encoding='utf-8'> 13 File "C:/Users/xu516/PycharmProjects/Python全棧開發/第三模塊/面向對象編程/25 內置方法.py", line 71, in <module> 14 f.read() 15 ValueError: I/O operation on closed file.
定義一個Open類,模仿文件打開操作,
1 class Open: 2 def __init__(self, filename): 3 print('open file......') 4 self.filename = filename 5 6 def __del__(self): 7 print('del.....') 8 9 f = Open('屬性查找.py') 10 11 結果為: 12 13 open file...... 14 del.....
可以看出,實例化觸發了 __del__方法,
1 class Open: 2 def __init__(self, filename): 3 print('open file......') 4 self.filename = filename 5 6 def __del__(self): 7 print('del.....') 8 9 f = Open('屬性查找.py') 10 11 print('-----main-------') 12 13 結果為: 14 open file...... 15 -----main------- 16 del.....
執行完print之后,觸發__del__方法
1 class Open: 2 def __init__(self, filename): 3 print('open file......') 4 self.filename = filename 5 6 def __del__(self): 7 print('回收操作系統的資源: self.close()') 8 9 f = Open('屬性查找.py') 10 11 print('-----main-------') 12 13 結果為: 14 15 open file...... 16 -----main------- 17 回收操作系統的資源: self.close()
print 之前 del f
1 class Open: 2 def __init__(self, filename): 3 print('open file......') 4 self.filename = filename 5 6 def __del__(self): 7 print('回收操作系統的資源: self.close()') 8 9 f = Open('屬性查找.py') 10 11 del f 12 13 print('-----main-------') 14 15 結果為: 16 17 open file...... 18 回收操作系統的資源: self.close() 19 -----main-------
執行過程發生了變化,