- 自定义排序
import collections Card = collections.namedtuple('Card',['rank','suit']) class FrenchDeck: # list类型 ranks = [str(n)for n in range(2,11)]+list('JQKA') suits = '黑桃 方块 梅花 红心'.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] suits_values = dict(黑桃=3,方块=2,梅花=1,红心=0) def spades_high(card): rank_value = FrenchDeck.ranks.index(card.rank) b = suits_values[card.suit] a = rank_value * len(suits_values) + suits_values[card.suit] return b def main(): desk = FrenchDeck() for card in sorted(desk,key=spades_high): print(card) if __name__ == "__main__": main()
小结:
__getitem__ 方法 :用于列表的索引/切片
__contains__ 方法:用于in运算符
2.字符串表示形式
(1)__repr__ 和__str__的区别
__str__: print,面向用户
__repr__ : 命令行 打印对象,面向程序员
如果你指向实现这两个特殊方法中的一个,推荐__repr__
(2)自定义布尔值
重写__bool__方法即可
特殊方法总揽:https://docs.python.org/3/reference/datamodel.html