流畅的Python第一章

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容