zoukankan      html  css  js  c++  java
  • 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-------

    执行过程发生了变化,

  • 相关阅读:
    包管理器Bower使用手冊之中的一个
    开机就提示“请安装TCP/IP协议,error=10106”的解决的方法
    Apache Thrift的简单使用
    Python机器学习实战&lt;一&gt;:环境的配置
    数据库期末考试复习题 第二�
    数据集成之主数据管理(一)基础概念篇
    Cocos2d-x开发中C++内存管理
    html中#include file的使用方法
    网页的背景图片代码
    TEST
  • 原文地址:https://www.cnblogs.com/xudachen/p/8659874.html
Copyright © 2011-2022 走看看