我最近写了一些需要标记属性的函数:
def fn1(): pass
fn1.mark = True
实际标记是由装饰器完成的,但它既不在这里也不在那里。我担心的是,当我以相同的方式标记类中的方法时,绑定(bind)方法时标记将不可见:
class A:
def meth1(): pass
meth1.mark = True
但实际上该属性是可见的:
>>> fn1.mark
True
>>> A.meth1.mark
True
>>> A().meth1.mark
True
但是,该属性不能在绑定(bind)方法中赋值或删除,因为它可以在函数中:
>>> A().meth1.mark = False
AttributeError: 'method' object has no attribute 'mark'
>>> del A().meth1.mark
AttributeError: 'method' object has no attribute 'mark'
方法的属性在绑定(bind)时如何显示?
最佳答案
方法对象实现 __getattribute__
以将未知属性的属性访问委托(delegate)给底层函数对象。但是,他们不委托(delegate) __setattr__
,这就是分配失败的原因。如果您想查看代码,它是 method_getattro
在 Objects/classobject.c
中。
关于python - 方法如何透明地查看函数属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53070401/