第一章主要介紹了一些Python的數據模型和幾個常見的魔術方法,比如 __len__
,__bool__
等,這些魔術方法,是實現不同數據類型行為一致性的關鍵。
實例如下,實現一副牌:
from collections import namedtuple
from random import shuffle
Card = namedtuple("Card", ('rank', 'suit'))
class FrenchDeck(object):
ranks = [str(n) for n in range(2, 11)] + list('JQKA')
suits = ('spades', 'diamonds', 'clubs', 'hearts')
def __init__(self):
self._cards = [Card(rank, suit) for suit in self.suits
for rank in self.ranks]
shuffle(self._cards)
def __len__(self):
return len(self._cards)
def __getitem__(self, position):
return self._cards[position]
if __name__ == '__main__':
decks = FrenchDeck()
for deck in decks:
print(deck)
魔術方法不能自己隨意添加,比如 foo這種。
一個簡單的向量類:
from math import hypot
class Vector(object):
def __init__(self, x = 0, y = 0):
self.x = x
self.y = y
def __repr__(self):
return "Vector at ({0}, {1})".format(self.x, self.y)
def __abs__(self):
return hypot(self.x, self.y)
def __bool__(self):
return bool(abs(self))
def __add__(self, other):
x = self.x + other.x
y = self.y + other.y
return Vector(x, y)
def __mul__(self, scalar):
return Vector(self.x * scalar, self.y * scalar)
if __name__ == '__main__':
v1 = Vector(1, 3)
print(v1 * 4)
本章主要簡單介紹了Python的一些基本魔術方法,并沒有太多內容。。。