__new__方法和其他一些知识点

__new__方法先于__init__方法。著名的self对象就是通过__new__创建的。

对象A和B在遇到==时,会调用__eq__方法。

扑克牌:
from collections import namedtuple from random import choice from random import shuffle import json Card = namedtuple('Card', ['rank', 'suit']) class FranchDeck: ranks = [str(n) for n 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): return self._cards[item] def __setitem__(self, key, value): self._cards[key] = value def __str__(self): return json.dumps(self._cards, ensure_ascii=False) # 先拿一副牌 deck = FranchDeck() # 抽第一张牌 print(deck[0]) # 洗牌 shuffle(deck) # 再抽第一张牌 print(deck[0]) # 随机抽一张 print(choice(deck)) # 打印整副牌 print(deck)
上面的shuffle依赖__setitem__方法,如果没有,就会报错。
此处使用了命名元祖namedtuple、列表生成式、重写__len__方法、重写__getitem__方法、重写__setitem__方法、重写__str__方法。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号