python从属关系编号_笨办法学Python 习题 42: 对象、类、以及从属关系
有一个重要的概念你需要弄明白,那就是“类 (class)” 和“对象 (object)” 的区别。问题在于, class 和object 并没有真正的不同。它们其实是同样的东西,只是在不同的时间名字不同罢了。我用禅语来解释一下吧:
鱼和泥鳅有什么区别?
这个问题有没有让你有点晕呢?说真的,坐下来想一分钟。我的意思是说,鱼和泥鳅是不一样,不过它们其实也是一样的是不是?泥鳅是鱼的一种,所以说没什么不同,不过泥鳅又有些特别,它和别的种类的鱼的确不一样,比如泥鳅和黄鳝就不一样。所以泥鳅和鱼既相同又不同。怪了。
这个问题让人晕的原因是大部分人不会这样去思考问题,其实每个人都懂这一点,你无须去思考鱼和泥鳅的区别,因为你知道它们之间的关系。你知道泥鳅是鱼的一种,而且鱼还有别的种类,根本就没必要去思考这类问题。
让我们更进一步,假设你有一只水桶,里边有三条泥鳅。假设你的好人卡多到没地方用,于是你给它们分别取名叫小方,小斌,小星。现在想想这个问题:
小方和泥鳅有什么区别?
这个问题一样的奇怪,但比起鱼和泥鳅的问题来还好点。你知道小方是一条泥鳅,所以他并没什么不同,他只是泥鳅的一个“实例 (instance)” 。小斌和小星一样也是泥鳅的实例。我的意思是说,它们是由泥鳅创建出来的,而且代表着和泥鳅一样的属性。
所以我们的思维方式是(你可能会有点不习惯):鱼是一个“类 (class)” ,泥鳅是一个“类 (class)” ,而
小方是一个“对象 (object)” 。仔细想想,然后我再一点一点慢慢解释给你。
鱼是一个“类”,表示它不是一个真正的东西,而是一个用来描述具有同类属性的实例的概括性词汇。
你有鳍?你有鳔?你住在水里?好吧那你就是一条鱼。
后来河蟹养殖专家路过,看到你的水桶,于是告诉你:“小伙子,你这些鱼是泥鳅。” 专家一出,真相即现。并且专家还定义了一个新的叫做“泥鳅”的“类”,而这个“类”又有它特定的属性。细长条?
有胡须?爱钻泥巴?吃起来味道还可以?那你就是一条泥鳅。
最后家庭煮妇过来了,他跟河蟹专家说:“非也非也,你看到的是泥鳅,我看到的是小方,而且我要把小方和剁椒配一起做一道小菜。”于是你就有了一只叫做小方的泥鳅的“实例 (instance)” (泥鳅也是鱼的一个“实例”),并且你使用了它(把它塞到你的胃里了),这样它就是一个“对象 (object)” 。
这会你应该了解了:小方是泥鳅的成员,而泥鳅又是鱼的成员。这里的关系式:对象属于某个类,而某个类又属于另一个类。
写成代码是什么样子
这个概念有点绕人,不过实话说,你只要在创建和使用 class 的时候操心一下就可以了。我来给你两个区分 Class 和 Object 的小技巧。
首先针对类和对象,你需要学会两个说法,“ is-a( 是啥 )” 和“ has-a( 有啥 )” 。“是啥”要用在谈论“两者以类的关系互相关联”的时候,而“有啥”要用在“两者无共同点,仅是互为参照”的时候。
接下来,通读这段代码,将每一个注解为 ##?? 的位置标明他是“ is-a” 还是“ has-a” 的关系,并讲明白这个关系是什么。在代码的开始我还举了几个例子,所以你只要写剩下的就可以了。
记住,“是啥”指的是鱼和泥鳅的关系,而“有啥”指的是泥鳅和鳃的关系。
(译注:为了解释方便,译文使用了中文鱼名。原文使用的是“三文鱼 (salmon)” 和“大比目鱼(halibut)” ,名字也是英文常用人名。)
1
关于 class Name(object)
记得我曾经强迫让你使用 class Name(object) 却没告诉你为什么吧,现在你已经知道了“类”和“对象”的区别,我就可以告诉你原因了。如果我早告诉你的话,你可能会晕掉,也学不会这门技术了。
真正的原因是在 Python 早期,它对于 class 的定义在很多方面都是严重有问题的。当他们承认这一点的时候已经太迟了,所以逼不得已,他们需要支持这种有问题的 class 。为了解决已有的问题,他们需要引入一种“新类”,这样的话“旧类”还能继续使用,而你也有一个新的正确的类可以使用了。
这就用到了“类即是对象”的概念。他们决定用小写的“ object” 这个词作为一个类,让你在创建新类时从它继承下来。有点晕了吧?一个类从另一个类继承,而后者虽然是个类,但名字却叫“ object”…… 不过在定义类的时候,别忘记要从 object 继承就好了。
的确如此。一个词的不同就让这个概念变得更难理解,让我不得不现在才讲给你。现在你可以试着去理解“一个是对象的类”这个概念了,如果你感兴趣的话。
不过我还是建议你别去理解了,干脆完全忘记旧格式和新格式类的区别吧,就假设 Python 的 class 永远都要求你加上 (object) 好了,你的脑力要留着思考更重要的问题。
加分习题
1. 研究一下为什么 Python 添加了这个奇怪的叫做 object 的 class ,它究竟有什么含义呢?
2. 有没有办法把 Class 当作 Object 使用呢?
3. 在习题中为 animals 、 fish 、还有 people 添加一些函数,让它们做一些事情。看看当函数在Animal 这样的“基类 (base class)” 里和在 Dog 里有什么区别。
4. 找些别人的代码,理清里边的“是啥”和“有啥”的关系。
5. 使用列表和字典创建一些新的一对应多的“ has-many” 的关系。
6. 你认为会有一种“ has-many” 的关系吗?阅读一下关于“多重继承 (multiple inheritance)” 的资料,然后尽量避免这种用法。
常见问题回答
这些 ## ?? 注解是干嘛用的?
这些注解是供你填空的。你应该在对应的位置填入“ is-a” 、“ has-a” 的概念。重读这节习题,看看其它的注解,仔细理解一下我的意思。
这句 self.pet = None 有什么用?
确保类的 self.pet 属性被设置为 None 。
super(Employee,self).__init__(name) 是做什么用的?
这样你可以可靠地将父类的 __init__ 方法运行起来。搜索“ python super” ,看看它的优缺点。
词语练习
class:告诉python创造一个新的东西
object:两个意思:最基本的东西和任何实例化的东西。
instance:创建一个类得到的东西。
def:在类中创建一个函数。
self:在类里面的函数中使用,是实例和object能访问的变量。
inheritance:继承,一个类可以继承另一个类,像你和你的父母。
composition:一个类可以包含另外一个类,就像汽车包含轮胎。
attribute:一个属性类,通常包括变量。
is-a:表示继承关系
has-a:包含关系
通过卡片记忆这些词语,单独的词语通常没什么意义,不过我还是要先知道它们的存在。
短语练习
class x(y):创建一个类x,它继承了y类。
class x(object):def __init__(self,j):x类包含__init__函数,函数中有self和j参数。
class x(object):def m(self,j):类x包含m函数,m函数有self和j两个参数。
foo = x():设置foo为类x的实例化。
foo.m(j):通过foo调用m函数,参数是self和j。
foo.k = q:通过foo给k属性赋值为q。
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250
python从属关系编号_笨办法学Python 习题 42: 对象、类、以及从属关系相关推荐
- 笨办法学python在线阅读_笨办法学python全集.pdf
TableofContents 笨办法学Python 1.1 序言 1.2 前言 1.3 简介 1.4 练习0.安装和准备 1.5 练习1.第一个程序 1.6 练习2.注释和井号"#&quo ...
- python转义例题_笨办法学Python记录--习题37 异常,lambda,yield,转义序列
为什么使用异常 错误处理.事件通知.特殊情况处理.退出时的行为.不正常的程序流程. 简单的示例 在没有任何定义x变量的时候: print x print 1 将会抛出NameError异常: Name ...
- 笨办法学python pdf 第三版_笨办法学python第三版
笨办法学python第三版pdf电子书是一本Python学习参考书,是美国程序员Zed A.Shaw编著,通过简单通俗的方法,结合内部的集体,让程序员学懂python,适用于初级学习python编程的 ...
- 笨办法学python第五版_笨办法学python PDF下载|笨办法学python第五版 电子版附目录_最火软件站...
笨办法学Python第五版PDF电子版是专门为初学Python的朋友准备的一款电子图书资料,可以帮助你更好的学习Python编程知识,该电子书每章节都附带了常见问题回答以及练习题目,能够帮助学习者快速 ...
- Python入门书籍推荐——《笨办法学Python》
很多小伙伴在学习Python的道路上,觉得越来越难.今天为小伙伴推荐一本非常适合Python小白的书籍<笨办法学Python>第三版. 在豆瓣有7.8的评分,学习Python的小伙伴千万不 ...
- 笨办法学python3进阶篇下载_笨办法学Python 3 进阶篇
书名:"笨办法"学Python 3:进阶篇 定价:59.0 ISBN:9787115505392 作者: 泽德·A. 肖 版次:第1版 出版时间:2020-06 内容提要: 本书是 ...
- 笨办法学python3进阶篇_笨办法学Python 3 进阶篇
第 一部分 准备知识 1 如果不喜欢作者的个人流程怎么办 2 如果发现自己太糟糕怎么办 2 习题0 准备工作 3 程序员用的编辑器 3 Python 3.6 3 工作终端 4 pip和virtuale ...
- 笨办法学python3进阶篇下载_笨办法学Python 3:进阶篇
第 一部分 准备知识 1 如果不喜欢作者的个人流程怎么办 2 如果发现自己太糟糕怎么办 2 习题0 准备工作 3 程序员用的编辑器 3 Python 3.6 3 工作终端 4 pip和virtuale ...
- python考试代码复制_笨办法学Python 习题 26: 恭喜你,现在可以考试了! 错误代码下载链接...
你已经差不多完成这本书的前半部分了,不过后半部分才是更有趣的.你将学到逻辑,并通过条件判断实现有用的功能. 在你继续学习之前,你有一道试题要做.这道试题很难,因为它需要你修正别人写的代码.当你成为程序 ...
最新文章
- 如何制定恰当的信息安全策略
- 求助帖:android开发初期:为什么我在活动二设置的singInstance模式跑到活动三去了???
- linux驱动开发字符设备,linux驱动开发(三) 字符设备驱动框架
- matlab 林智仁,机器学习:林智仁libsvm 工具箱 在matlab下的应用总结
- SQLServer 2005 XML 在 T-SQL 查询中的典型应用[转]
- php文件手机怎么解压,linux 怎么解压文件
- python 内置模块 增加_模块的内置方法--Python提高班
- PMcaff写给大家的年终碎碎念 PMcaff | 记录
- SAP HR 常用事务代码
- java解析html jsoup_2020-06-02 jsoup java解析html
- GridView控件中的一些常见问题
- MyBatis配置详解
- 计算机二级真题期刊论文模板,最新一般期刊论文格式
- linux zip -e,在 Linux 上压缩文件:zip 命令的各种变体及用法
- ip addr命令解析
- count的几种写法
- SPSS连接mysql数据库详细操作教程
- maven 依赖公司另一项目中的对象,对象里的部分属性set值报错not found
- matlab矩阵写入csv
- 如何设置电信光猫?图解手把手教你(超级详细)
热门文章
- 【5G系列】RLC (Radio Link Control )协议详解
- oracle批量清除会话,oracle快速彻底清理kill会话
- Python 抓取淘宝联盟优惠券
- react事件 组件设计传参使用
- 【Kubernetes/docker】生成docker镜像推送到hub并在Kubernetes部署应用-20220407
- 什么叫做形态学图像处理_形态学图像处理
- 微信朋友圈装x代码_朋友圈生成器有哪些_微信朋友圈生成器大全_微信朋友圈装逼生成器下载_飞翔软件专题...
- eclipse上插入中文到mysql,但是navicat显示问号《网上很多方法都没用》,最终google到了精品
- sql group by 后取最后一条数据
- 关于OSPF的五种报文类型介绍、OSPF八种状态机变化与报文交互介绍。