【2020Python修炼记】Python语法入门—内置方法 __str__和__del__

python的class机制内置了很多特殊的方法来帮助使用者高度定制自己的类,

这些内置方法都是以双下划线开头和结尾的,会在满足某种条件时自动触发。

我们以常用的__str__和__del__为例来简单介绍它们的使用。

 

1、__str__方法

__str__方法会在对象被打印时自动触发,print功能打印的就是它的返回值,

我们通常基于方法来定制对象的打印信息,该方法必须返回字符串类型

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

    def __str__(self):
        # print('运行了...')
        return "<%s:%s>" %(self.name,self.age)


obj = People('辣白菜同学', 18)

# print(obj.__str__())
print(obj)  # <'辣白菜同学':18>

obj1=int(10)
print(obj1)

# 输出结果
# <辣白菜同学:18>
# 10

 

2、__del__方法

__del__会在对象被删除时自动触发。

由于python自带的垃圾回收机制会自动清理python程序的资源,所以当一个对象只占用应用程序级资源时,完全没必要为对象定制__del__方法,但在产生一个对象的同时涉及到申请系统资源(比如系统打开的文件、网络连接等)的情况下,关于系统资源的回收,python的垃圾回收机制便派不上用场了,需要我们为对象定制该方法,用来在对象被删除时自动触发回收系统资源的操作

class People:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.x = open('a.txt',mode='w')
        # self.x = 占据的是操作系统资源

    def __del__(self):
        print('run...')
        # 发起系统调用,告诉操作系统回收相关的系统资源
        self.x.close()

obj = People('辣白菜同学', 18)
# del obj # obj.__del__()
print('============>')

# 输出结果:

============>
run...

class People:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.x = open('a.txt',mode='w')
        # self.x = 占据的是操作系统资源

    def __del__(self):
        print('run...')
        # 发起系统调用,告诉操作系统回收相关的系统资源
        self.x.close()

obj = People('辣白菜同学', 18)
del obj # obj.__del__()
print('============>')

# 输出结果
# run...
# ============>
探索版二--View Code

 

posted @ 2020-04-15 17:50  bigorangecc  阅读(288)  评论(0编辑  收藏  举报