流程的Python 第一章:数据模型

来源:互联网 发布:迅捷数据恢复注册问题 编辑:程序博客网 时间:2024/06/08 19:43

前言
       数据模型-对象,值和类型。
       在Python中,一切数据都是对象,或者和对象有关。

目录

  1. 内容回顾
  2. 相关资料
  3. 阅读后感

正文
一. 内容回顾

第一章节通过2个示例讲解了通过特殊方法名能让你自己的对象实现与支持以下的语言构架,并与之交互:

 1. 迭代 2. 集合类 3. 属性访问 4. 运算符重载 5. 函数和方法的调用 6. 对象的创建和销毁 7. 字符串表示形式和格式化 8. 管理上下文

示例一:

# -*- coding:utf-8 -*-import collectionsCard = collections.namedtuple('Card', ['rank', 'suit'])class FrenchDeck:    ranks = [str(n) for n in range(2, 11)] + list('JQKA')    suits = 'spades diamonds clubs hearts'.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]if __name__ == '__main__':    f = FrenchDeck()    print f.__len__()    print f.__getitem__(2)

示例二:

# -*- coding:utf-8 -*-from math import hypotclass Vector:    def __init__(self, x=0, y=0):        self.x = x        self.y = y    def __repr__(self):        return 'Vector(%r, %r)' % (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__':    v = Vector(3, 4)    print v.__repr__()    print v.__abs__()    b = Vector(3, 5)    print v.__add__(b)    print v.__mul__(3)

书籍原文摘录:
1. 通过特殊方法来利用Python数据模型的两个好处:
       *作为你的类用户,他们不必去记住标准操作的各式名称(“怎么得到元素的总数?是 .size() 还是 .length() 还是别的什么?”)。
       *可以更加方便地利用Python的标准库,比如random.choice函数,从而不用重新发明轮子。

2.通过实现特殊方法,自定义数据类型可以表现得跟内置类型一样,从而让我们写出更具表达力的代码–或者说,更具Python风格的代码。

二. 相关资料
学步网-Python数据模型:
       为什么我这里要强调这里的对象,对象有一些属性(函数也罢,变量也罢都是属性)与之关联,你操作一个对象,其实就是在和这些属性打交道。

       一个类有其自己的namespace(命名空间),而且这个命名空间的实现本质上是一个字典。换句话说,你对一个类的操作其实就是在对这个“特殊”的字典进行操作,那么怎么去区分类的实例和类呢,其实在python中,类的实例也有一个字典,去记录该实例的属性。

       不论你想写出什么样的数据,只要去重写python中一些内在的函数即可。

知乎-玩转Python:
       实现一个 Python 类的时候,可以首先考虑遵循体制内潜规则,这样便可以获得体制内福利。换句话说,实现了某个特殊函数不仅仅代表着支持对应功能,还意味着所有适用于相似内置类型的函数,都可以直接拿来用。

极客学院-Python语言参考手册-数据模型:
       每一个对象都具有一个标识,一个类型和一个值。对象一旦建立,它的表示就永远不能改变了;你可以认为它是在内存中的地址。‘is’ 运算符用来可以比较两个对象的身份;‘id’ 可以获得一个整数形式的对象标示。

三. 阅读后感
Python中的数据模型,当然你可以不了解这些东西,照样可以写出漂亮的python代码。如相关资料里记录的,用内置的特殊方法去重写这些内置函数会更加简单方便,而且快捷。

官方数据模型文档:https://docs.python.org/2/reference/datamodel.html

参考
1. Fluent Python 笔记(一):数据模型
2. #PYTHON#数据模型
3. Python的数据模型-对象,值和类型
4. 极客学院-数据模型

阅读全文
0 0