我喜欢使用attr
并决定阅读一些源代码。引起我注意的一部分是以下(来源):
# Cache this descriptor here to speed things up later.
bound_setattr = _obj_setattr.__get__(self, Attribute)
# Despite the big red warning, people *do* instantiate `Attribute`
# themselves.
bound_setattr("name", name)
bound_setattr("default", default)
bound_setattr("validator", validator)
其中_obj_setattr
定义为object.__setattr__
。
我很好奇为什么会这样做。我已经阅读了这个stackoverflow 响应,发现它非常有用,但它没有涵盖关于__get__
. 我已经阅读了一些内容,descriptors
但还没有完全理解它们。所以,我的问题是,为什么使用_obj_setattr.__get__(self, A)("name", name)
, 而不是object.__setattr__(self, "name", name)
?