Python - 当类变量是资源时如何自动清除类变量

时间:2017-05-27 21:09:41

标签: python resources xlwings

我在Python中处理类变量时遇到问题。我有一个代码如下。

class TempClass:
    resource = xlwings.Book() # xlwings is a library manipulating Excel file.

    #...

在这里,要清除'资源',我需要执行

resource.close()

当清除类(非对象)时是否调用了内置函数,以便我可以在该函数中编写上述代码?或者有没有办法清除“资源”?

我的Python版本是3.6

1 个答案:

答案 0 :(得分:0)

不要使用类变量。只要你的python解释器没有关闭,类就存在,类变量是活着的。

通常使用需要关闭的资源,您只需使用上下文管理器(例如contextlib.closing):

import contextlib

# I don't have xlwings so I create some class that acts like it:
class Book(object):
    def __init__(self):
        print('init')

    def close(self):
        print('close')

实际"背景"可以像这样创建和使用。在块内部,资源处于活动状态,并在块结束后关闭。我使用print来显示每个方法的调用位置:

print('before the context')
with contextlib.closing(Book()):
    print('inside the context')
print('after the context')

打印哪些:

before the context
init
inside the context
close
after the context