首页 > 解决方案 > 一旦函数返回,什么会保留对函数嵌套类的引用?

问题描述

考虑一下(Python 3):

class M(type):
    def __new__(cls, name, bases, dct):
        print('creating class {}'.format(name))
        return super().__new__(cls, name, bases, dct)

    def __del__(cls):
        print('deleting class {}'.format(cls.__name__))


def func():
    class A(metaclass=M):
        pass


func()
func()
func()
print('end')

输出是:

creating class A
creating class A
creating class A
end
deleting class A
deleting class A
deleting class A

这表明,一旦创建了函数的嵌套类(调用 时func()),即使函数返回,某些东西也会对其进行引用。

究竟是什么拥有这样的参考?返回后有什么方法可以访问创建的类func()

注意:sys.getrefcount(A)就在函数返回之前返回 5。

标签: pythonpython-3.xreference

解决方案


推荐阅读