我最近編寫了一些需要標記屬性的函數: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條經驗 獲得超7個贊
方法對象實現__getattribute__
將未知屬性的屬性訪問委托給底層函數對象。__setattr__
但是,他們不委托,這就是分配失敗的原因。如果你想看代碼,它method_getattro
在Objects/classobject.c
.
添加回答
舉報
0/150
提交
取消