01-data-model/frenchdeck.py

1. Python解释器碰到特殊的句法时,会使用__特殊方法__去激活一些基本的对象操作。

特殊方法的存在是为了被解释器用的。没有my_object.len()这种写法,应该用len(my_object)。

比如my_collection[key] -> my_coolection._getitem_(key)。

例如在class FrenchDeck中实现__len()__就可以使用len(object)。

实现 _getitem()_ 就可以使用deck[position]。

2. 很多时候__特殊方法__的调用是隐式的

比如for i in x: -> x._iter_(), 前提是__iter__在x中被实现。

3. Python内置了一个从序列中__随机选出__一个元素的函数random.choice。

    from random import choice
a = [1,2,3,4,5]
choice(a)

4. 因为class FrenchDeck是__可迭代的__,所以__in运算符__可以用在FrenchDeck类上。另外,一个集合类型没有实现__contains__方法,那么in运算符会按顺序做一次迭代搜索。

>>> Card('Q', 'hearts') in deck
True
>>> Card('Q', 'beasts') in deck
False

01-data-model/vector2d.py

5. 用特殊方法__abs__实现向量求模,__add__实现'+'运算符,__mul__实现'*'运算符

6. 实现__repr__后

v1 = vector()

print(v1) 和 repr(v1) 都能把一个对象用字符串的形式表达出来。

7. %s与%r的不同, %r输出的是原始数据(raw data)

%s 用str()。 %r使用repr()。

%s 给用户看, %r供debug用。

_repr_ goal is to be unambiguous

_str_ goal is to be readable

如果一个对象没有__str__函数,Python解释器会用__repr__作为替代。

from datetime import datetime
d = datetime.today()
print('%s' % d)
print('%r' % d)

8. bool(x) 即 x._bool_(),若不存在_bool_() 则调用_len_()

9. 特殊方法一览 中文电子书P57

总结:

学术化:Python中偏爱说数据类型,其实意思是对象模型。通过实现Python数据类型的特殊方法,以提供丰富的元对象协议(元对象是对于构建语言来说核心的对象,协议意思是构建核心语言的API),自定义类型可以表现得和内置内容一样,从而写出更flexible和Pythonic的代码。

通俗化:通过实现特殊方法(_method_),可以赋予对象的某些行为、功能。

Fluent_Python_Part1序幕,01-data-model, 数据模型的更多相关文章

  1. HBase 数据模型(Data Model)

    HBase Data Model--HBase 数据模型(翻译) 在HBase中,数据是存储在有行有列的表格中.这是与关系型数据库重复的术语,并不是有用的类比.相反,HBase可以被认为是一个多维度的 ...

  2. [ExtJs] ExtJs4.2 数据模型Ext.data.Model学习

    Model代表应用程序管理的一些对象.例如,我们可能会为 我们想在系统中建模的现实世界中的一些物体像使用者.产品和汽车等定义一个Model.这些Model在 Ext.ModelManager中注册,被 ...

  3. How to: Use the Entity Framework Data Model Located in an External Assembly 如何:使用位于外部程序集中的EF数据模型

    If you have a non-XAF application, and want to develop an XAF application that utilizes the same dat ...

  4. How to: Supply Initial Data for the Entity Framework Data Model 如何:为EF数据模型提供初始数据

    After you have introduced a data model, you may need to have the application populate the database w ...

  5. How to: Create a Business Model in the XPO Data Model Designer 如何:在 XPO 数据模型设计器中创建业务模型

    This topic provides step-by-step instructions on how to use the XPO Data Model Designer in XAF appli ...

  6. Define the Data Model and Set the Initial Data 定义数据模型并设置初始数据

    This topic describes how to define the business model and the business logic for WinForms and ASP.NE ...

  7. 数据库系统概述(Data Model、DBMS、DBS、RDBS、Structured Query Language)

    数据Data 描述事物的符号记录成为数据. 数据是数据库中存储的基本对象.   除了基本的数字之外.像图书的名称.价格.作者都可以称为数据. 将多种数据记录列成一张表.通过数据表管理数据. 每一行的数 ...

  8. Sentry 监控 - Snuba 数据中台架构(Data Model 简介)

    系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...

  9. ThinPHP命名空间,连接数据库是要修改的配置文件,Model数据模型层,跨控制器调用,如何获取系统常量信息,

    一.命名空间(主要是为了实现自动加载类) *命名空间(相当于虚拟的目录),为了让类有一个统一的文件夹来管理(可以自动加载'类'),每个文件都要有命名空间*tp如何做命名空间:*TP框架下有一个初始命名 ...

  10. PowerDesigner从Physical Data Model转Excel

    参考资料:http://www.cnblogs.com/hggc/archive/2013/10/15/3369857.html 由于有把ER图转Excel的需求,幸运地找到一个可用脚本,稍做修改完成 ...

随机推荐

  1. python调用HEG工具批量处理MODIS数据

    下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理 主要参考 HEG的用户手册:https://newsroom.gsfc.nasa.go ...

  2. ECMAScript基本语法——①与HTML的结合方式

    内部JS: HTML页面内定义一个script标签,标签内就是JS代码一般情况会写到特定的位置,写到head标签内 外部JS: HTML页面内定义一个script标签,使用src加载外部的JS文件 注 ...

  3. configparser模块简介

    https://www.cnblogs.com/plf-Jack/p/11170284.html

  4. hdu 5917

    题意:给你一个无向图,问图中有多少个符合条件的集合?条件为这个集合里面存在一个子集(大小>=3)为团或者都是孤立点.答案mod1e9+7: 根据 Ramsey定理,大于等于6个的集合,肯定存在一 ...

  5. 完整安装IIS服务

    此文主要是针对前面提到的 IIS支持json.geojson文件 添加脚本映射时,提示找不到asp.dll时的解决方法. 主要参考了此文:http://www.kodyaz.com/articles/ ...

  6. Echat 地图样式格式

    1.白色 mapStyle: { styleJson: [{ 'featureType': 'water', 'elementType': 'all', 'stylers': { 'color': ' ...

  7. springmvc 整合 redis

    引入依赖 <!--redis--> <dependency> <groupId>redis.clients</groupId> <artifact ...

  8. 详解C++11智能指针

    前言 C++里面的四个智能指针: auto_ptr, unique_ptr,shared_ptr, weak_ptr 其中后三个是C++11支持,并且第一个已经被C++11弃用. C++11智能指针介 ...

  9. Django框架介绍(二)

    1.MVC框架和MTV框架 MVC全名model view controller,是软件工程中的一种软件架构模式,把软件分为三个基本部分:模型(model).视图(view)和控制器(controll ...

  10. 解决修改JDK环境变量不生效方法

    解决修改JDK环境变量不生效方法 brupsuit1.7在安装时一直报错jdk版本低,我就将jdk1.6版本的卸了换成1.8的,结果修改了环境变量但它一直给我不生效.... 1.之前版本未卸载干净 进 ...