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的需求,幸运地找到一个可用脚本,稍做修改完成 ...
随机推荐
- centos7下编译安装redis5.05
准备环境: 1.一台centos7机器,配置没有什么要求(能联网) 2.下载好redis压缩包 下载redis包: 1.登录redis官网: https://redis.io/download 2.选 ...
- 虫师自动化测试robot Framework 框架的学习
1.python关键字的定义 #coding=utf-8 def add(a,b): return a+b if __name__ == "__main__": c = add(4 ...
- SQL操作DBF
--从SQL Server查询器预览dBase 文件中数据select * from openrowset('MICROSOFT.ACE.OLEDB.12.0','dBase 5.0;database ...
- AspxDashBorad_OnDashboardLoaded 获取对应的DashboardParameter
protected void ASPxDashboardViewerThrend_OnDashboardLoaded(object sender, DashboardLoadedWebEventArg ...
- MyBatis 动态代理开发
MyBatis 动态代理开发 § Mapper.xml文件中的namespace与mapper接口的类路径相同. § Mapper接口方法名和Mapper.xml中定义的每个statement的i ...
- IntelliJ IDEA 2017.3尚硅谷-----缓存和索引的清理
- AcWing 799. 最长连续不重复子序列 双指针(一般先写一个朴素暴力的做法,然后看两个指针直接是否存在单调关系,如果存在,就想方法优化)
https://www.acwing.com/problem/content/801/ #include<bits/stdc++.h> using namespace std ; int ...
- mysql 同时支持多少连接MYSQL 查看最大连接数和修改最大连接数
MySQL查看最大连接数和修改最大连接数 1.查看最大连接数 show variables like '%max_connections%'; 2.修改最大连接数 set GLOBAL max_con ...
- java基础(六)之继承初探
什么是继承? 一个类得到了另一个类当中的成员变量和成员方法.java只支持单继承.一个子类只允许继承一个父类,一个父类可以被多个子类继承. 比如下面的一个例子, 先创建一个Person类 class ...
- Makefile中的wildcard/notdir/patsubst
在Makefile规则中,通配符会被自动展开. 但在变量的定义和函数引用时,通配符将失效.这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的用法是:$(wildcard PATTE ...