第一章主要介绍了一些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的一些基本魔术方法,并没有太多内容。。。