人物类VS.人物清单

时间:2015-11-20 14:18:22

标签: python class variables pygame

在pygame的几乎所有示例程序中,字符被实例化为类,其中包含类似这样的代码:

class Character(object):
    def__init__(self,image,stuff):
        self.image = image
        self.stuff = stuff[:]

bob = Character(image,stuff)

我想知道使用类的好处是仅仅使用普通列表。我可以代替使用类实例化,只需创建一个这样的列表:

bob = [image,stuff[:]]

我想知道人们使用类的原因是否具有直接与字符交互的函数,并且只是被定义为类的一部分而不是作为可以在字符上使用的单独函数。

谢谢!

3 个答案:

答案 0 :(得分:1)

一般来说,我会说它更清楚。使用list,您最终会想知道“索引0处的内容是什么?索引1处的内容是什么?”等等。然后,您必须追溯代码以找到确定bob的位置。

此外,如果您在整个代码中创建其他字符,则必须以相同的方式创建它们。使用class,您可以轻松搜索代码库中的角色创建并更新它(例如,如果您想为角色添加另一个属性),如果您错过任何属性,python将抛出Exception,因此您知道在哪里修理它。有了这个列表,它真的很难找到,如果你错过任何一个python就不会告诉你 - 你会得到一个时髦的IndexError,你需要追溯到更根本的根本原因

答案 1 :(得分:1)

使用class时,您可以继承其他class并创建method,这不适用于list。但是,如果您知道自己只使用class Character之类的静态值,则可以查看namedtuple。这是一个如何使用它的简单示例:

from collections import namedtuple
Character = namedtuple('Character', 'image stuff')
bob = Character(image, stuff)

答案 2 :(得分:0)

在这个简单的情况下,为什么在列表Bob上使用类bob

  • 轻松访问属性。记住Bob.imagebob[0]更简单。列表越长,就越难。

  • 代码可读性。我不知道第bob[7]=bob[3]+bob[6]行是做什么的。对于一个类,同一行变为Bob.armor=Bob.shield+Bob.helmet,我知道它的作用。

  • 组织。如果某些函数仅用于字符,那么在属性之后声明它们是切实可行的。一个类强迫您在同一个地方拥有与角色相关的所有内容。

不是列表,而是使用字典:

bob = {"image":image, "stuff":stuff[:], ...}
bob["armor"]=bob["shield"]+bob["helmet"]

与类一样,您可以轻松访问属性,代码可读。