Python----面向對象---內置方法--__str__方法和__del__方法


 

一、__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-------

執行過程發生了變化,

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM