我創(chuàng)建了這個類來測試一些__getattr__特性:class Trace: def __init__(self, val): self.val = val def __setattr__(self, attr, value): print('set ' + attr) def __getattr__(self, attr): print('get ' + attr)然后我創(chuàng)建了一個實例a = Trace(10)print(a.val)a.val = 5print(a.val)但是,即使我只獲取現(xiàn)有屬性,這也是輸出:set valget valNoneset valget valNone我正在使用 Python 3.7。
1 回答

MMTTMM
TA貢獻1869條經(jīng)驗 獲得超4個贊
__getattr__僅在未正常找到屬性但沒有此類限制時才調(diào)用__setattr__(這就是為什么沒有等效的__getattribute__for 它的原因)。您重寫__setattr__為未實際設(shè)置實例屬性,因此該屬性始終丟失并且__getattr__無論如何都會被調(diào)用。(是的,它也適用__init__。)
刪除__setattr__以快速查看您的預期行為,或添加其默認行為:
def __setattr__(self, attr, value):
print('set ' + attr)
super().__setattr__(attr, value)
添加回答
舉報
0/150
提交
取消