前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python第二十一课:类的从属关系

Python第二十一课:类的从属关系

作者头像
HuangWeiAI
发布2019-07-30 15:07:07
7960
发布2019-07-30 15:07:07
举报
文章被收录于专栏:浊酒清味

第一节 是什么和有什么

在上一课我们介绍了类和对象,但是并没有详细给大家理清楚它们的联系和区别。这里我们从一个例子出发,试图让大家有一个更加清晰的认识。假如我问你香蕉和水果有什么区别,你肯定会说香蕉是水果的一种,而水果包含了香蕉。没错,你大概能看出来水果就是我们代码中的类(class),而香蕉是水果的一个实例(instance),同时香蕉也是一个对象(object)。恭喜你,已经参透了类和对象的第一层关系。接下来,我会问题你,香蕉和仙人蕉有什么关系呢?事实上,仙人蕉是香蕉的一种,也就是说仙人蕉是香蕉这个类的实例化。说到这里,我们不难发现,水果是一个类,香蕉也是一个类,然而这并不矛盾。我们可以用从属关系来区分它们:香蕉是一种水果而仙人蕉是一种香蕉。我们用“是什么”(is-a)这种描述来类与类以及实例和类之间的关系。单单有了是什么的描述其实还不够,我们还需要用一种“有什么”(has-a)关系来描述类中间的一些属性,比如说香蕉有皮,也有果肉,那么我们就说香蕉这个对象有果皮和肉这两种属性。下面看具体的例子:

这个例子中出现了一些大家可能陌生的代码,我们一步步分析,先撇开没见过的代码来做一个是什么和有什么的练习。对于第一个类Fruit,我们知道Fruit是一个object,而Fruit有name和color;对于第二个类,Banana是一种Fruit,而Banana有name和price这两种属性。到此为止我们初步理清楚了上面代码中两个类之间的关系,通过打印不难发现,Canna(仙人蕉)将Banana这个类实例化,且给Banana的两种属性,名字和价格赋值。

运行结果:

第二节 继承

眼尖的同学们肯定发现了上面的代码中有两处奇怪的地方,一处是Fruit类中的self.color=None,而另外一处是很陌生的super函数。我们给大家一一解释:(1)None在这里相当于空的意思,也就是说我们虽然定义了Fruit这个类,并且让其有一个color属性,但是我们并不想直接实例化这个类,所以就让color在__init__()函数中保持空的状态。(2)我们之所以不直接实例化,是因为我们有另一个目的,就是让Banana来继承Fruit中的color。要做到这一步,除了定义类的时候,将object替换成Fruit外,我们还需要借助super函数来继承Fruit中的self.color。

我们沿用例一中的代码,先打印Canna.color,大家预期结果是什么呢?注意到我们之前定义的是None,所以自然我们需要给color赋值,再次打印就会出现我们赋好的值。

运行结果:

练习题

1,建立一个Fruit类的实例,比如用Apple,打印查看Apple的属性。

2,尝试给Banana.color赋值一个类的实例化。

3,再定义一个新的类,让它继承Banana。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浊酒清味 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档