クラシック クラスと新しいスタイル クラスの次の違いを考慮してください。
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__ に対して呼び出されないのですか?