(python) __str__与__del__

5人阅读 评论(0) 收藏 举报

__str__:改变对象的字符串显示。

class People:
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex
    def __str__(self):
        # print('===========>')
        return '<名字:%s 年龄:%s 性别:%s>' %(self.name,self.age,self.sex)

obj=People('monicx',23,'male')
# print(obj.__str__())#<__main__.People object at 0x0000000001E78AC8>
# print(obj)#等于print(obj.__str__())<__main__.People object at 0x00000000026D8AC8>
#经过定义了__str__()后变为:
print(obj)#<名字:monicx 年龄:23 性别:male>

__del__

析构方法,对象在内存中被释放时,会自动解发执行该方法。

import time
class People:
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

    def __del__(self):#对象被删除的时候会自动触发
        print('__del__')

obj=People('monicx',23,'male')
time.sleep(2)

如查产生的对象只是python程序级别(用户级的)那么我们就没有必要定义__del__,但若产生的对象同时还会向操作系统发起调用时,即一个对象有用户级和内核级两种资源,则必须在清除该对象的同时回收系统资源,就要用到__del__。它是应用场景跟资源有关,如下所示:

class MyOpen:
    def __init__(self,filepath,mode='r',encoding='utf-8'):
        self.filepath=filepath
        self.mode=mode
        self.encoding=encoding
        self.fobj=open(filepath,mode=mode,encoding=encoding)
    def __str__(self):
        msg='''
        filepath:%s
        mode:%s
        encoding:%s
        '''%(self.filepath,self.mode,self.encoding)
        return msg
    def __del__(self):
        #回收应用资源时先回收系统的资源。
        self.fobj.close()

f=MyOpen('test.py')#f.是python的变量会被回收。
print(f.fobj)
res=f.fobj.read()
print(res)

查看评论

python内置函数__init__及__str__的区别

一、说明: __init__:类实例初始化函数 __str__:类实例字符串化函数 二、 示例1: ? 1 2 3 ...
  • wangzhaotongalex
  • wangzhaotongalex
  • 2015-11-26 14:14:05
  • 1579

Python对象中__del__方法起作用的条件

对象的__del__是对象在被gc消除回收的时候起作用的一个方法,它的执行一般也就意味着对象不能够继续引用。        示范代码如下: class Demo:        def __de...
  • grey_csdn
  • grey_csdn
  • 2017-08-27 21:07:11
  • 535

python中__del__使用方法

创建对象后,python解释器默认调用__init__()方法。当删除一个对象时,python解释器也会默认调用一个方法,这个方法为__del__()方法。在python中,对于开发者来说很少会直接销...
  • xun527
  • xun527
  • 2017-07-26 23:38:14
  • 4612

飘逸的python - __new__、__init__、__call__傻傻分不清

__new__: 对象的创建,是一个静态方法,第一个参数是cls。 __init__ : 对象的初始化, 是一个实例方法,第一个参数是self。 __call__ : 对象可call,注意不是类,是对...
  • u010180339
  • u010180339
  • 2015-06-28 17:02:51
  • 3244

python __del__ 调用时机

#class demo class Person: '''Represents a person.''' population = 0 def __init__(s...
  • lanzheng_1113
  • lanzheng_1113
  • 2012-03-03 11:48:28
  • 2968

python 的__del__删除器方法

初学python,遇到了关于python关于内存的小问题,就简单的叙述下,如果有不同意见,欢迎一起讨论~ 1.引用计数 python类似java是有垃圾回收机制的语言,所以我们不需要像c++一...
  • wwh578867817
  • wwh578867817
  • 2015-04-30 18:50:50
  • 3348

python的__del__看来还是少用的好

    今天在cu上看到一个朋友用类的__del__来做了一些处理,结果造成了线程的死锁。__del__应该是尽量不要用它,因为一个对象的销毁,不是我们可以随便简单的控制的。python对对象使用了引...
  • zhaoweikid
  • zhaoweikid
  • 2007-07-03 18:08:00
  • 2932

理解python中的__str__, __call__, __init__, __getattr__

解释 __getattr__: 当调用不存在的属性时访问这个方法 __str__: 对象打印出来的字符串(返回用户看到的) __repr__: 对象打印出来的字符串(返回开发者看到的) __call...
  • gzhouc
  • gzhouc
  • 2017-04-18 22:30:05
  • 761

python 之 __str__

__str__           直接打印对象的实现方法 ———————————————————————————————————————————————————— 在python语言...
  • followingturing
  • followingturing
  • 2012-09-07 11:17:00
  • 22849
    个人资料
    等级:
    访问量: 104
    积分: 153
    排名: 117万+
    文章分类
    文章存档
    最新评论