Ethan 打开笔记本电脑,从电脑桌面上的文件夹里翻出两个 Excel 表格文件,在这两个文件里,分别存着最近去过普吉岛和新西兰旅游的旅客信息,需要从这两份数据里,找出那些去过普吉岛但没去过新西兰的人,再让销售人员向他们推销一些新西兰精品旅游路线。将文件转换为 JSON 格式后,里面的内容大致如下:
1 | # 去过普吉岛的人员数据 |
Ethan 打开笔记本电脑,从电脑桌面上的文件夹里翻出两个 Excel 表格文件,在这两个文件里,分别存着最近去过普吉岛和新西兰旅游的旅客信息,需要从这两份数据里,找出那些去过普吉岛但没去过新西兰的人,再让销售人员向他们推销一些新西兰精品旅游路线。将文件转换为 JSON 格式后,里面的内容大致如下:
1 | # 去过普吉岛的人员数据 |
在 Python 中,数据模型(Data Model)是一个非常重要的概念,假如把 Python 语言看作一个框架,数据模型就描述了框架如何工作,创建怎样的对象才能更好地融入 Python 这个框架。所有与数据模型有关的方法,基本都是以双下划线 __ 开头和结尾,它们通常被称为魔法方法(Magic Method)。
1 | class Person: |
Metaclasses are deeper magic than 99% of users should ever worry about. If you wonder whether you need them, you don’t (the people who actually need them know with certainty that they need them, and don’t need an explanation about why).
-- Tim Peters
元类是 Python 中的一种特殊对象,它控制着类的创建行为,就像普通类控制着实例的创建行为一样。type 是 Python 中最基本的元类,直接调用 type() 就可以创建一个类:
1 | >>> Foo = type('Foo', (), {'bar': 3}) |
在调用 type() 创建类时,需要提供三个参数,它们的含义如下:
几乎所有现代编程语言都支持面向对象功能,但由于设计理念不同,不同编程语言所支持的面向对象有许多差异。在 Python 里,万物皆对象,最基础的浮点数也是一个对象。
通过类,我们可以把头脑中的抽象概念进行建模,进而实现复杂的功能。封装(Encapsulation)是面向对象编程里的一个重要概念,为了更好地体现类的封装性,许多编程语言支持将属性设置为公开或私有,只是方式略有不同。
当你使用 __{var} 的方式定义一个私有属性时,Python 解释器只是重新给了它一个包含当前类名的别名 _{class}__{var},因此你仍然可以在外部用这个别名来访问和修改它。
设计哲学:期望程序员做正确的事,而不是在语言上增加太多条条框框。
在某些特殊场景下,合理利用 __dict__ 可以帮你完成常规做法难以做到的一些事情:
iTunes 是苹果公司提供的内容商店服务,在里面可以购买世界各地的电影、音乐等数字内容。同时,iTunes 还提供了一个公开的可免费调用的内容查询 API。下面这个脚本就通过调用该 API 实现了查找歌手的第一张专辑的功能: