流畅的Python (Fluent Python) —— 第一部分

Python 最好的品质之一是一致性。
魔术方法(magic method)是特殊方法的昵称。特殊方法也叫双下方法。

1.1 一摞Python风格的纸牌 

 1 import collections
 2 Card = collections.namedtuple('Card', ['rank', 'suit'])  # 创建了一个有名字的元组
 3 
 4 
 5 class FrenchDeck:  # 隐式继承了Object类
 6     ranks = [str(n) for n in range(2, 11)] + list('JQKA')  # 可选的序号
 7     suits = 'spades diamonds clubs hearts'.split()  # 可选的花色
 8 
 9     def __init__(self):  # 创建该类的对象时,会执行此方法
10         self._cards = [Card(rank, suit) for suit in self.suits
11                        for rank in self.ranks]
12 
13     def __len__(self):  # 调用 len(deck) 时,实际上是执行 len.__len__ 方法
14         return len(self._cards)
15 
16     def __getitem__(self, position):  # 调用 deck[0] 时,实际上是执行 deck.__getitem__(key=0)
17         return self._cards[position]
18 
19 
20 deck = FrenchDeck()
21 print(len(deck))  # 判断个数的定义,是由__len__实现的
22 print(deck[0])  # 根据位置抽取,此方法是由__getitem__实现的

通过实现特殊方法来利用 Python 数据模型的两个好处 :

1. 作为你的类的用户,他们不必去记住标准操作的各式名称(怎么得到元素的总数? 是 .size() 还是 .length() 还是别的什么? )。
2. 可以更加方便地利用 Python 的标准库,比如 random.choice 函数,从而不用重新发明轮子。



猜你喜欢

转载自www.cnblogs.com/shihaoyu/p/10465095.html