Fluent_Python_Part1序幕,01-data-model, 数据模型
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, 数据模型的更多相关文章
- HBase 数据模型(Data Model)
HBase Data Model--HBase 数据模型(翻译) 在HBase中,数据是存储在有行有列的表格中.这是与关系型数据库重复的术语,并不是有用的类比.相反,HBase可以被认为是一个多维度的 ...
- [ExtJs] ExtJs4.2 数据模型Ext.data.Model学习
Model代表应用程序管理的一些对象.例如,我们可能会为 我们想在系统中建模的现实世界中的一些物体像使用者.产品和汽车等定义一个Model.这些Model在 Ext.ModelManager中注册,被 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 数据库系统概述(Data Model、DBMS、DBS、RDBS、Structured Query Language)
数据Data 描述事物的符号记录成为数据. 数据是数据库中存储的基本对象. 除了基本的数字之外.像图书的名称.价格.作者都可以称为数据. 将多种数据记录列成一张表.通过数据表管理数据. 每一行的数 ...
- Sentry 监控 - Snuba 数据中台架构(Data Model 简介)
系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Maps Sentry For ...
- ThinPHP命名空间,连接数据库是要修改的配置文件,Model数据模型层,跨控制器调用,如何获取系统常量信息,
一.命名空间(主要是为了实现自动加载类) *命名空间(相当于虚拟的目录),为了让类有一个统一的文件夹来管理(可以自动加载'类'),每个文件都要有命名空间*tp如何做命名空间:*TP框架下有一个初始命名 ...
- PowerDesigner从Physical Data Model转Excel
参考资料:http://www.cnblogs.com/hggc/archive/2013/10/15/3369857.html 由于有把ER图转Excel的需求,幸运地找到一个可用脚本,稍做修改完成 ...
随机推荐
- android 如何查看socket、websocket通信数据 抓包
怎么使用可以自行百度
- mongodb多字段去重
单字段去重 db.student.distinct("name"); 多字段去重 db.student.aggregate([{ $group:{ ...
- csp 初赛 (不懂的地方)
11. 有以下结构体说明和变量定义,如图所示,指针 p. q. r 分别指向一个链表中的三个连续结点. struct node { int data;st ...
- MySQL数据库重点监控指标
MySQL数据库重点监控指标 QPS queries per seconds 每秒中查询数量 show global status like 'Question%'; Queries/seconds ...
- Echart 地图实例
1.地图实例 function func_InEchart() { require.config({ paths: { echarts: '../Scripts/echart2/echarts' }, ...
- Codeforces Hello2020 A-E简要题解
contest链接:https://codeforces.com/contest/1284 A. New Year and Naming 思路:签到,字符串存一下,取余拼接. #include< ...
- Django路由层、视图层
一.路由匹配: 第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个后立即停止 urlpatterns = [ url(r'^admin/', admin.site.urls), url( ...
- 好文章推荐 数据库mysql
https://blog.csdn.net/guofeng93/article/details/53994112
- E - Serge and Dining Room
https://codeforces.com/contest/1180/problem/E 转载自他人博客 题意:有nn个菜肴,有mm个小朋友,每个菜肴的价格为aiai,每个小朋友有bibi元钱,小朋 ...
- idea tomcat启动无效
今天换了台电脑,用idea 部署tomcat启动死活启动不了,报 Application Server was not connected before run configuration stop, ...