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__方法,的共同结果








  • 相关阅读:
    redis 初探
    RAID,mdadm(笔记)
    EXT2文件系统
    压缩、解压缩命令(笔记)
    shell编程while
    软连接、硬链接、磁盘分区管理(笔记)
    磁盘管理(笔记)
    恢复Linux下被误删除的文件(笔记)
    Linux下高效数据恢复软件extundelete应用实战
    RedHat安装GCC问题-解决依赖问题
  • 原文地址:https://www.cnblogs.com/bozhengheng/p/10259793.html
Copyright © 2011-2022 走看看