【发布时间】:2021-06-28 05:36:07
【问题描述】:
class C:
data = 'spam'
def __getattr__(self, name):
print('getattr:', name)
return getattr(self.data, name)
X = C()
X.__getitem__(1) // <-- works!
type(X).__getitem__(X, 1) // <-- AttributeError: type object 'C' has no attribute '__getitem__'
既然type(X).__getitem__(X, 1)在C类中找不到__getitem__方法,不应该调用__getattr__(self, name)函数吗?
X.__getitem__(1) 在实例和类中找不到__getitem__,因此它调用__getattr__(self, name)。
为什么一个有效而一个无效?我读到特殊方法查找会跳过__getattr__ 函数(如果隐式调用?),如X[1],但是,在这种情况下我明确调用它。
【问题讨论】:
标签: python operator-overloading