python纸牌类TypeError: object of type 'FrenchDeck' has no len()

import collections
Card=collections.namedtuple('Card',['rank','suit'])

class FrenchDeck:
    ranks = [str(n) for n in range(2,11)] + list('JKQA')
    suits = 'spades diamonds clubs hearts'.split( )

def __init__(self):
        self._cards = [Card(rank,suit) for suit in self.suits
                                  for rank in self.ranks]
def __len__(self):
        return len(self._cards)

def __getitem__(self,position):
        return self._cards[position]

为什么用len()显示TypeError: object of type 'FrenchDeck' has no len()

不知道是你贴出来的问题,还是怎么问题,你这应该是缩进不对呀

len方法给类FrenchDeck增加了直接len的操作,但是你这缩进错了

import collections
Card=collections.namedtuple('Card',['rank','suit'])

class FrenchDeck:
    ranks = [str(n) for n in range(2,11)] + list('JKQA')
    suits = 'spades diamonds clubs hearts'.split()

    def __init__(self):
        self._cards = [Card(rank,suit) for suit in self.suits
                                  for rank in self.ranks]
    def __len__(self):
        return len(self._cards)

    def __getitem__(self,position):
        return self._cards[position]

if __name__ == "__main__":
    f = FrenchDeck()
    print( "len =={}".format(len(f)))

对象错了 return len(self.cards)