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)