考虑以下经典类和新样式类之间的区别。
class A():
data = 'abcd'
def __getattr__(self, name):
return getattr(self.data, name)
class B(object):
data = 'abcd'
def __getattr__(self, name):
return getattr(self.data, name)
print(A()[0]) # Prints 'a'
print(B()[0]) # TypeError: 'B' object does not support indexing
我知道对这个属性的解释是新样式对象属性搜索从类开始,而不是内置操作的实例。但是类对象也定义了 __getattr__ 以及为什么它没有被这里缺少的属性调用,即 __getitem__。