python绑定方法中的uuu closure属性从何而来?

2024-04-24 05:10:56 发布

您现在位置:Python中文网/ 问答频道 /正文

# python3
def foo(a):
    class A:
        def say(self):
            print(a)
    return A
A = foo(1)
'__closure__' in dir(A.say) # True
a = A()
a.say.__closure__ # it returns the closure tuple
'__closure__' in dir(a.say) # False
'__closure__' in dir(a.say.__class__) # False
'__closure__' in dir(a.say.__class__.__class__) # False

在Python3中,A.say是一个函数,我知道它有\uu closure\uuuu属性。 不是在dir(a.say)或它的超类中,而是在a.say中。这让我困惑。 谢谢。你知道吗


Tags: inselffalsetruereturnfoodefdir
1条回答
网友
1楼 · 发布于 2024-04-24 05:10:56

我不知道Python中类型为instancemethod的对象的内部实现,但我认为它是如何在instance method objects中工作的。你知道吗

我猜当你说a.say.\uu闭包时,它首先在dir(a.say)中查找闭包,然后在dir(a.say)中回退。say.imu func公司)。你知道吗

>>> a = foo(1)()
>>> print type(a.say)
>>> instancemethod

>>> a.say.im_func.__closure__
>>> (<cell at 0x10a00f980: int object at 0x7fef29e098b8>,)

>>> '__closure__' in dir(a.say.im_func)
>>> True

相关问题 更多 >