【发布时间】:2020-09-17 11:58:11
【问题描述】:
假设
class D:
def __init__(self,id): self.id = id
def __get__(self,obj,type=None):
print(self.id,"__get__ is called")
class C:
d1 = D(1)
d2 = D(2)
d3 = D(3)
c = C()
然后在调用hasattr(c,"d1") 期间调用C.d1 的__get__ 方法。为什么? hasattr()不应该只查字典吗?
当<tab> 在交互式 CPython-version-3.6.10 会话中按下以完成时,会发生同样的(但更奇怪),就像在 c.d<tab> 中一样。在这种情况下,__get__ 将为除最后一个之外的所有匹配属性调用。
这是怎么回事?
【问题讨论】:
标签: python python-3.x python-descriptors