我最近编写了一些需要标记属性的函数:def fn1(): passfn1.mark = True实际的标记是由装饰者完成的,但它既不在这里也不在那里。我担心的是,当我以相同的方式标记类中的方法时,在绑定方法时标记将不可见:class A: def meth1(): pass meth1.mark = True但实际上该属性是可见的:>>> fn1.markTrue>>> A.meth1.markTrue>>> A().meth1.markTrue但是,不能在绑定方法中分配或删除属性,因为它可以在函数中:>>> A().meth1.mark = FalseAttributeError: 'method' object has no attribute 'mark'>>> del A().meth1.markAttributeError: 'method' object has no attribute 'mark'方法的属性在绑定时如何使其可见?
1 回答
LEATH
TA贡献1936条经验 获得超6个赞
方法对象实现__getattribute__
将未知属性的属性访问委托给底层函数对象。__setattr__
但是,他们不委托,这就是分配失败的原因。如果你想看代码,它method_getattro
在Objects/classobject.c
.
添加回答
举报
0/150
提交
取消