zoukankan      html  css  js  c++  java
  • 一些内置方法的使用,一个惊艳的小程序,内置方法的一些使用

    import json
    from collections import namedtuple # 命名元祖

    Card = namedtuple('Card','rank suit')
    c1 = Card(2,'红心')

    class FranchDeck:
    ranks = [str(rank) for rank in range(2,11)] + list('JQKA')
    suits = ['红心','方块','黑桃','梅花']
    def __init__(self):
    self.__cards = [Card(rank,suit) for rank in FranchDeck.ranks for suit in FranchDeck.suits]
    def __len__(self):
    return len(self.__cards)

    def __getitem__(self, item):        # 可以使用调用属性的方式调用self.__cards
            return self.__cards[item]

    def __setitem__(self, key, value):
    self.__cards[key] = value
    def __str__(self):
    return str(self.__cards)
    deck = FranchDeck()
    print(deck[0])
    # 随机抽牌 用到random 模块的choice  # choice方法依赖 len方法,所以实现一个自己的len方法,__len__
    from random import choice
    choice(deck)
    print(choice(deck))
    # 随机洗牌用到random 模块的choice
    from random import shuffle      # 依赖 __setitem__方法
    shuffle(deck)
    print(deck)
    print(deck[:5])





    另一个例子
    # 如果两个人的姓名,性别一致,就认为两个属性相等,去重
    class A:
    def __init__(self,name,sex,age):
    self.name = name
    self.sex = sex
    self.age = age
    def __eq__(self, other):
    if self.name == other.name and self.sex == other.sex:
    return True
    return False
    def __hash__(self):
    return hash(self.name + self.sex)

    a = A('egg','男',38)
    b = A('egg','男',37)
    print(set((a,b)))
    结果:{<__main__.A object at 0x00000140AE056F60>}

    如果只是使用set集合去重,得不到想要的结果,结果自己实现了,__hash__,__eq__方法,得到了相同的内存地址,证明可以用了,
    但是这两个方法,缺一个都不行
    这个例子证明了,set集合的去重,应该是使用了,__hash__,__eq__方法,的共同结果








  • 相关阅读:
    [NOIp2016] 天天爱跑步
    状压DP小拼盘
    DP × KMP
    KMP算法 详解+模板
    [NOI2014] 起床困难综合症
    [洛谷P3391] 文艺平衡树 (Splay模板)
    START
    【C】单链表的实现
    【数据结构】动态顺序表
    C语言实现扫雷程序
  • 原文地址:https://www.cnblogs.com/bozhengheng/p/10259793.html
Copyright © 2011-2022 走看看