第一章 Data model
⚠️整本书都是讲解Data model,第一章是一个概述。
⚠️不适合初学者。因为special method和meta programming技巧只是Python代码的一部分。不是全部。
目标:学习第一章内容。之后是否深入还是先学习一些其他的知识待定。
纸牌的例子
可以把data model是对Python的框架的描述。
无论在哪种框架下写程序,程序员都会花费大量时间操作implement很多的由框架自身调用的方法。
当你使用Python data model时也是一样的。
Python解释器调用特殊方法来运行基本的对象的操作, 这种特殊方法经常被special syntax激活。这种特殊方法的名字的写法:__xxx__。
例如:
object.__getitem__(self, key)这是一个特殊方法。a是一个dict,我们希望读取这个对象的key"a"对应的值。下例使用了a["a"],一个特殊的语法。解释器发现这个语法 就会调用特殊方法type(a).__getitem(a, "a"),来完成相应的读取操作。
>>> a = dict(a=1,b=2)>>>a
{'a': 1, 'b': 2}>>> a['a'] == type(a).__getitem__(a, 'a')
True
Data model中的special methods name让你的对象执行/实现,支持,交互basic language构架,例如:
Iteration
Collections 集合类
Attribute access
Operator overloading 重载操作符
函数和方法的调用
Object创建和销毁
字符串格式化
Managed contexts被管理的上下文代码(就是with语法块)
⚠️这些特殊方法,也被叫做magic method,或者dunder method。只是一种叫法。
importcollections#扑克牌类,每张牌有2个属性:数字/字母rank,花色suit
Card = collections.namedtuple('Card', ['rank', 'suit'])classFrenchDeck(object):#2个类属性,储存牌的rank和suit。
ranks = [str(n) for n in range(2, 11)] + list('JQKA') #13种rank
suits = 'spades diamonds clubs hearts'.split() #4种suit
#实例化一个对象,实例变量_cards(数据属性)是一个list,储存了52张Card(类型是namedtule)
def __init__(self