Python类关闭:它叫什么名字?

愚蠢

我知道用函数返回创建的高阶函数和闭包。在大多数情况下,我发现它很有用并重复使用。我的问题与使用类定义创建的闭包有关,并引用从函数调用返回的类实例的函数。可以将其归类为常规闭包,还是Python(或编程)文献中的其他内容?这是一个例子:

class Klass:
    def __init__(self, val):
        self.val = val
    def ret_val(self):
        return self.val


def gen_val_fn(val):
    inst = Klass(val)
    return inst.ret_val

fn5 = gen_val_fn(5)
fn6 = gen_val_fn(6)

print("first: {}".format(fn5()))
print("second: {}".format(fn6()))

内部原理在这里如何工作?我在这里的假设是在gen_val_fn(5)调用之后,创建了Klass的第一个实例,直到进行垃圾回收之前,它不会fn5被垃圾回收。因此,它能够创建val=5为闭包(我不确定这可能是正确的术语)。您是否可以指出任何文件或内部知识?如果此说明有缺陷,请解释一下。

谢谢!

戒指

这称为绑定方法。

绑定方法保留对实例(即self)和函数的引用,因此在调用该self方法时,会将其插入参数列表中。self话,当然持有的所有其他成员变量的引用。

在您的示例中,请尝试以下操作:

>>> fn5
<bound method Klass.ret_val of <__main__.Klass object at 0x006B1270>>
>>> fn5.__self__
<__main__.Klass object at 0x006B1270>
>>> fn5.__self__.val
5

然后,通话fn5()与通话相同fn5.__func__(fn5.__self__)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章