python3 :习题40、习题41

习题40:模块、类和对象

这一节一下就变得好抽象啊,看的脑阔痛。

模块和字典差不多
假设有个字典,它里面有一个叫’apple’的键(key),而你要从中取值(value)的话,你需要:
在这里插入图片描述
而对模块,我们应该已经了解的属性:

  1. 模块是包含函数和变量的python文件。
  2. 可以导入这个文件。
  3. 然后可以使用 . 操作符访问模块中的函数和变量。

假设我有模块叫mystuff.py,并在里面放一个Apple的函数
在这里插入图片描述
接下来就可用import来调用这个模块,并访问Apple函数。
在这里插入图片描述
同样的,可以将变量放进模块里,并访问它。
故,python里有一个非常常用的模式:

  1. 拿一个类似“键=值”风格的容器;
  2. 通过“键”的名称获取其中的“值”。
    对字典来说,获得值的方法是“[key]”,对于模块来说,语法是“.key".除此之外,它们基本没什么不同。

类和模块差不多
因此可以将模块当做一种专用的字典,可以通过它储存一些python代码,并访问它。而python还有“类”来实现类似目的。通过“类”,可以把一组函数和数据放到一个容器中,从而用“ . "运算符访问它们。
创建一个类的方法大致是:
在这里插入图片描述
使用类而不是模块的原因是:你可以那上面的mystuff类重复创建很多出来。而对于模块来说,一次导入之后,整个程序中就只有这一份内容,那该如何用mystuff达到类似mystuff.py 模块的结果?

对象和import差不多
如果说类和迷你模块差不多,那么对类来说,也必有一个类似导入(import)的概念。这个概念就叫做“实例化”(instantiate),它的意思其实是“创建”。而当你将一个雷实例化后,得到的就叫对象(object)。

将类实例化(创建类)的方法就是像调用函数一样调用一个类。
在这里插入图片描述
第一行代码即为“实例化”操作,和调用函数很类似。python在你实例化操作背后的一系列逻辑为:

  1. python查找mystuff()并知道了它是你定义过的一个类。
  2. python创建了一个空对象,里面包含了你在该类中使用def指定的所有函数。
  3. 然后python回去检查你是不是在里面创建了一个_init_函数,如果有创建,就会调用这个函数,从而对你新创建的空对象实现了初始化。
  4. 在mystuff的_int_函数里,有一个多余的函数叫self,这就是python为你创建的空对象而你可以对它进行类似模块、字典等的操作,为它设置一些变量。
  5. 在这里,zed把self.tangerine设为一段歌词,这样就初始化了对象。
  6. 最后python将这个新建的对象赋给一个叫thing的变量,以供后面使用。

这个导入过程中,并不是直接拿来一个类就直接用,而是将类作为一个“蓝图”,然后用它创建和这个类有相同属性的副本。
在这里插入图片描述
不幸的是,又出现了错误,更不幸的是,我现在还不知道为啥错了,和书上一模一样不是么。

获取某样东西里包含的东西
现在有3种方法可以从某个东西中获取东西。

  1. 字典式:mystuff[‘apple’]
  2. 模块式:mystuff.apple() print(mystuff.tangerine)
  3. 类式: thing=mystuff() thing.apple() print(thing.tangerine)
  • 今日份编程(有错误):

在这里插入图片描述

  • 错误信息:(不知道怎么解决)

在这里插入图片描述

习题41:学习面向对象术语

专有词汇练习:

  • 类(class):告诉python创建新类型的东西。
  • 对象(object):两个意思,即最基本的东西,或者某样东西的实例。
  • 实例(instance):这是让python创建一个类时得到的东西。
  • def:这是类里边定义函数的方法。
  • self:在类的函数中,self指代被访问的对象或者实例的一个变量
  • 继承(inheritance):指一个类可以继承另一个类的特性,和父子关系类似。
  • 组合(composition):指一个类可以将别的类作为它的部件构建起来,有点像车子和车轮的关系
  • 属性(attribute):类的一个属性,它来自于组合,而且通常是一个变量。
  • 是什么(is-a):又来描述继承关系,如salmon is-a fish。
  • 有什么(has-a):又来描述某个东西是由另一些东西组成的,或者某个东西有某个特征,如 salmon has-a mouth。

措辞练习:

  • 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的函数,它接收self和J作为参数。
  • foo=X():将foo设为类X的一个实例。
  • foo.M(J):从foo中找到M函数,并使用self和J参数调用它。
  • foo.K=Q: 从foo中获取K参数,并将其设为Q。

在上述的每一条当中,你看到X,Y,M,J,K,Q,和foo的地方都可以将他们当做空白点来对待。

混合巩固练习

阅读测试:
这段代码据作者zed所说“很简单,你应该能看懂“在下试了试。emmmm。。肯定是我的水平还不够,在求助各种方法后,尽量注释了这段代码的前半部分,并试着运行了下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至少运行还成功得,这还是在参考了网上的结果的情况下:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值