python从零开始--36 python内置类属性 __len__ __getitem__ 实现 (补充26节)

在网上看到一个关于实现 __len__   __getitem__的代码,稍微修改了一下,刚好作为26节内置类属性的补充。

代码说明:

1. 定义一稿Card具名元组,用来存放扑克点数和花色的组合,FrenchDeck初始化后,刚好是52组数据

2. __len__实现了len(obj)的用法,所以下面可以直接使用len(deck)

3.__getitem__其实实现的是通过索引返回数据的功能,就是列表、元组常用的功能,一旦类实现了这个方法,就可以在这个类的对象上使用 obj[xxx]的写法,很方便的读取数据。

 

import collections

Card = collections.namedtuple('Card',['rank','suit']) #具名元组

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

    def __init__(self):   # 初始化
        self._cards = [Card(rank, suit) for rank in self.ranks
                                        for suit in self.suits]

    def __len__(self):        # 用len取长度的特殊方法
        return len(self._cards)

    def __getitem__(self, item): # 用索引取值的特殊方法
        try:
            return self.cards[item]
        except (IndexError, TypeError):
            print("Please input an int number between -52~51 including -52 & 51.")

    def printAllitem(self):
        for item in self._cards:
            print(item)

if __name__ == "__main__":
    deck = FrenchDeck()

    print("There are total {} cards.".format(len(deck)))
    print("The third card is: {}".format(deck[2]))
    print("\nPrint all cards as below:")
    deck.printAllitem()

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值