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

执行过程发生了变化,

原文地址:https://www.cnblogs.com/xudachen/p/8659874.html