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-------
执行过程发生了变化,