我知道用函数返回创建的高阶函数和闭包。在大多数情况下,我发现它很有用并重复使用。我的问题与使用类定义创建的闭包有关,并引用从函数调用返回的类实例的函数。可以将其归类为常规闭包,还是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] 删除。
我来说两句