欢迎光临散文网 会员登陆 & 注册

习题 42: 物以类聚

2023-08-27 17:00 作者:薄荷糖鸢  | 我要投稿


虽说将函数放到字典里是很有趣的一件事情,你应该也会想到“如果 Python 能自动为你做这件事情该多好”。事实上也的确有,那就是 class 这个关键字。你可以使用 class 创建更棒的“函数字典”,比你在上节练习中做的强大多了。

Class (类)有着各种各样强大的功能和用法,但本书不会深入讲这些内容,在这里, 你只要你学会把它们当作高级的“函数字典”使用就可以了。 用到“class”的编程语言被称作“Object Oriented Programming(面向对象编程)” 语言。这是一种传统的编程方式,你需要做出“东西”来,然后你“告诉”这些东西去完成它们的工作。类似的事情你其实已经做过不少了,只不过还没有意识到而已。记得你做过的这个吧:


其实你这里已经使用了 class。``stuff`` 这个变量其实是一个 list class (列 表类)。而 ' '.join(stuff) 里调用函数 join 的字符串 ' '(就是一个空格) 也是一个 class —— 它是一个 string class (字符串类)。到处都是 class! 还有一个概念是 object(物件),不过我们暂且不提。当你创建过几个 class 后 就会学到了。你怎样创建 class 呢?和你创建 ROOMS 的方法差不多,但其实更 简单:


你看到参数里的 self 了吧?你知道它是什么东西吗?

对了,它就是 Python 创 建的额外的一个参数,有了它你才能实现 a.some_function()` 这种用法,这 时它就会把\ 前者翻译成 ``some_function(a) 执行下去。

为什么用 self 呢? 因为你的函数并不知道你的这个“实例”是来自叫 TheThing 或者别的名字的 class。所以你只要使用一个通用的名字 self 。这样你写出来的函数就会在任何情况下都能正常工作。 其实你可以使用 self 以外的别的字眼,不过如果你这样做的话,你就会成为所有 Python 程序员的众之矢的,所以还是随大流的好。只有变态才会在这里乱改, 我教你的没错。对以后会读到你的代码的人好点儿,因为你现在的代码 10 年以 后所有的代码都会是一团糟。 接下来,看到 __init__ 函数了吗?这就是你为 Python class 设置内部变量的方式。

你可以使用 . 将它们设置到 self 上面。另外看到我们使用了 add_me_up() 为你创建的 self.number 加值。后面你可以看到我们怎样可以使用这种方法为数字加值,然后打印出来。 Class 是很强大的东西,你应该好好读读相关的东西。尽可能多找些东西读并且多多实验。你其实知道它们该怎么用,只要试试就知道了。其实我马上就要去练吉他了,所以我不会让你写练习了。你将使用 class 写一个练习。 接下来我们将把习题 41 的内容重写,不过这回我们将使用 class:


你应该看到的结果 

这个版本的游戏和你的上一版效果应该是一样的,其实有些代码都几乎一样。比较一下两版代码,弄懂其中不同的地方,重点需要理解这些东西: 

  1. 怎样创建一个 class Game(object) 并且放函数到里边去。

  2. __init__ 是一个特殊的初始方法,可以预设重要的变量在里边。

  3. 为 class 添加函数的方法是将函数在 class 下再缩进一阶,class 的架构就是通过 缩进实现的,这点很重要。 

  4. 你在函数里的内容又缩进了一阶。

  5.  注意冒号的用法。 

  6.  理解 self 的概念,以及它在 __init__ 、 play 、 death 里是怎样使用的。

  7. 研究 play 里的 getattr 的功能,这样你就能明白 play 所做的事情。其实你可 以手动在 Python 命令行实验一下,从而弄懂它。 

  8. 最后我们怎样创建了一个 Game ,然后通过 play() 让所有的东西运行起来。 

加分习题 

  1. 研究一下 __dict__ 是什么东西,应该怎样使用。

  2. 再为游戏添加一些房间,确认自己已经学会使用 class 。

  3. 创建一个新版本,里边使用两个 class,其中一个是 Map ,另一个是 Engine 。

提示: 把 play 放到 Engine 里面。


习题 42: 物以类聚的评论 (共 条)

分享到微博请遵守国家法律