首先了解一下Python面向对象中类型-实例父类-子类的关系。下面的一些规则很有用。

当我们介绍许多不同的对象时,我们只用了两种关系(图4.1 关系):

  • 是一类(is a kind of)(实线):面向对象里叫做特殊化(specialization),这种关系是说对于两个对象,一个对象(子类)是另一个(父类)的特殊版本。蛇是爬行动物的一类,它有爬行动物的全部特征,也有称其为蛇的特殊的特征。

用到的术语:subclass ofsuperclass ofsuperclass-subclass

  • 是一个实例(is an instance of)(虚线):即实例化。这种关系是说一个对象(实例)是由另一个对象(类型)限定的一个具体的例子。我有个宠物蛇名叫Squasher, Squasher就是蛇的一个实例。

用到的术语: instance oftype oftype-instanceclass-instance

注意在日常会话中,‘是一个’对上述两种关系都适用。Squasher是一条蛇, 蛇是一个爬行动物。不过在此我们用特定的术语来避免混淆。

图4.1关系

我们对第一种关系使用实线是因为相对于第二种关系它们之间更靠近。举个例子——如果有人被要求列举一个类似于’蛇’的单词,这个人可能会回答’爬行动物’。然而,如果要列举一个类似于’Squasher’的单词,则就不那么可能会说出’蛇’了。

在这里给出两条很有用的关系属性:

虚线向上规则(Dashed Arrow Up Rule)

如果X是A的实例,且A是B的子类,则X也是B的实例。

虚线向下规则(Dashed Arrow Down Rule)

如果B是M的实例,且A是B的子类,则A也是B的实例。

换句话说,虚线箭头一端可以向上移动到实线箭头,虚线箭尾可以向下移(分别如图4.2 关系的传递性中的2a和2b所示)。这些属性可以从父类-子类关系的定义得出。

图4.2 关系的传递性

运用虚线向上规则,我们可以从下述第一条陈述得到第二条:

  1. Squasher是蛇的实例(或者说,Squasher的类型是蛇)。

  2. Squasher是爬行动物的实例(或者说,Squasher的类型是爬行动物)。

先前我们说过一个对象有确定的一个类型。那Squasher怎么会有两个?注意虽然两条陈述都正确,但一条更加正确(事实上包含另一条)。也就是说:

Squasher.__class__是蛇(Python中,__class__属性指向对象的类型)。

isinstance(Squasher, 蛇)和isinstance(Squasher, 爬行动物)都为真。

对于父类-子类关系存在一条相似的规则。

实线结合规则(Combine Solid Arrows Rule)

如果A是B的子类,且B是C的子类,则A也是C的子类。

蛇是一类爬行动物,爬行动物是一类动物,因此蛇是一类动物。或者用Python的方式说:

蛇.__bases__是(爬行动物,)(__bases__属性指向一个包含对象父类的元组)

issubclass(蛇, 爬行动物)和issubclass(蛇, 动物)都为真。

注意一个对象可能有多个基类。

最新文章

  1. 利用ShareSDK进行第三方登录和分享
  2. EJB 教程推荐
  3. 电脑Windows使用中遇到的那些问题
  4. centos中crontab(计时器)用法详解
  5. Shell配置_配置IP
  6. ie8 不支持new Date('2012-11-10')
  7. Core Java Volume I — 4.1. Introduction to Object-Oriented Programming
  8. c语言实现交换两个数的值
  9. python实现雅虎拍卖后台自动回复卖家消息
  10. java代理课程测试 spring AOP代理简单测试
  11. python 标准库 -- logging
  12. BZOJ2001: [Hnoi2010]City 城市建设
  13. 一步一步从原理跟我学邮件收取及发送 4.不同平台下的socket
  14. 设计模式 --> (16)观察者模式
  15. 【Swift】swift中使用kvc赋值的时候,注意事项
  16. 基于GCC的openMP学习与测试
  17. Polaristech 刘洋:基于 OpenResty/Kong 构建边缘计算平台
  18. [Swift]LeetCode686. 重复叠加字符串匹配 | Repeated String Match
  19. 杭电ACM2008--数值统计
  20. 【Noip模拟 20160929】划区灌溉

热门文章

  1. zookeeper_01:zookeeper概述
  2. qt界面不显示的原因
  3. AngularJS入门基础PPT(附下载链接)
  4. tab标签切换(无炫效果,简单的显示隐藏)
  5. 学习笔记 css3--选择器&新增颜色模式&文本相关
  6. ASP.NET Core Web开发学习笔记-1介绍篇
  7. XAMPP下重置mysql密码
  8. URI、URL和URN之间的区别与联系
  9. android textView 富文本显示
  10. Inno Setup技巧[实例]添加自定义页面