我创建了这个类来测试一些__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)然后我创建了一个实例a = Trace(10)print(a.val)a.val = 5print(a.val)但是,即使我只获取现有属性,这也是输出:set valget valNoneset valget valNone我正在使用 Python 3.7。
1 回答
MMTTMM
TA贡献1869条经验 获得超4个赞
__getattr__仅在未正常找到属性但没有此类限制时才调用__setattr__(这就是为什么没有等效的__getattribute__for 它的原因)。您重写__setattr__为未实际设置实例属性,因此该属性始终丢失并且__getattr__无论如何都会被调用。(是的,它也适用__init__。)
删除__setattr__以快速查看您的预期行为,或添加其默认行为:
def __setattr__(self, attr, value):
print('set ' + attr)
super().__setattr__(attr, value)
添加回答
举报
0/150
提交
取消
