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的需求,幸运地找到一个可用脚本,稍做修改完成 ...
随机推荐
- 【C/C++】最短路径
BFS求无权图的最短路径 用book数组的值表示路径长度即可,省略 Floyd算法(允许负边) Floyd算法可以一次性求出所有节点之间的最短距离,且代码简单,但是时间复杂度达到了n^3,因此只适用于 ...
- sql语言分类及区别、显示和隐示提交的指令
SQL的发展是从1974年开始的,其发展过程如下: 1974年-----由Boyce和Chamberlin提出,当时称SEQUEL. 1976年-----IBM公司的Sanjase研究所在研制RDBM ...
- JS高级---浅拷贝
浅拷贝 拷贝就是复制, 就相当于把一个对象中的所有的内容, 复制一份给另一个对象, 直接复制, 或者说, 就是把一个对象的地址给了另一个对象, 他们指向相同, 两个对象之间有共同的属性或者方法, ...
- JDBC添加为null的数据报错
定义实体类的时候定义为了基本数据类型,不能接收null需要改为引用数据类型
- 高级特征工程I
Mean encodings 以下是Coursera上的How to Win a Data Science Competition: Learn from Top Kagglers课程笔记. 学习目标 ...
- 服务遇到的问题 Linux
1.vnc配置: https://www.cnblogs.com/leolzi/p/9907856.html 2.遇到的问题,linux重启后不能链接的问题 rabbitmq 服务启动问题 [bf@l ...
- [Luogu]三步必杀
Description Luogu4231 Solution 我最近到底怎么了,这种题都做不出来了,一看题第一反应李超线段树(虽然不会),觉得不可做,看一眼题解才发现这个题可以差分,然后差分还打错了好 ...
- ConsoleWindow中的双击日志定位
很多项目都有自己重写Debug.Log的习惯,难免会遇到在Unity的Console窗口中双击日志, 但是没法直接跳转到想要看到的代码那一行的时候,解决办法有以下2种: 将自己封装的日志类制作成DLL ...
- [蓝桥杯][基础训练]Sine之舞
Description 最近FJ为它的奶牛开设了数学分析课,FJ知道,若要学好这门课,必须有一个好的三角函数基本功. 所以他为奶牛们做了一个“Sine之舞”的游戏,寓教于乐,提高奶牛的计算能力. 不妨 ...
- Python记: 列表:Python的主力
——————————————————————————我将青春翻涌成它...... 本节主要讨论列表不同于元组和字符串的地方__________列表是可变的,即可修改内容.另外,列表有很多特有的方法. ...