人物class VS。角色列表
Character class VS. Character list
在 pygame 的几乎所有示例程序中,字符都被实例化为 classes,并使用如下代码:
class Character(object):
def__init__(self,image,stuff):
self.image = image
self.stuff = stuff[:]
bob = Character(image,stuff)
我想知道使用 class 与仅使用普通列表相比有什么好处。我可以不使用 class 实例化而是创建一个这样的列表:
bob = [image,stuff[:]]
我想知道人们使用 classes 的原因是否是为了具有直接与角色交互的功能并且只是定义为 class 的一部分而不是作为单独的功能可以用在角色上。
谢谢!
一般来说,我会说它更清楚。使用 list
,您最终会想 "what was at index 0? what was at index 1?" 等等。然后你必须通过代码回溯以找到定义 bob
的位置以确保。
此外,如果您在整个代码中创建其他字符,则必须以相同的方式创建它们。使用 class
,您可以轻松地搜索代码库以创建角色并更新它(例如,如果您想向角色添加另一个 属性),如果您遗漏了任何一个,python 将抛出一个Exception
所以你知道在哪里修复它。有了这个列表,将很难找到并且 python 不会告诉您是否遗漏了任何信息 -- 您会得到一个奇怪的 IndexError
,您需要追溯至根本原因这是更多的工作。
使用 class
时,您可以从其他 class
继承并创建 method
,这不适用于 list
。但是如果你知道你只会像你的 class Character
那样使用静态值,你可能会检查 namedtuple
。这是一个如何使用它的简单示例:
from collections import namedtuple
Character = namedtuple('Character', 'image stuff')
bob = Character(image, stuff)
在这个简单的例子中,为什么要在列表 bob
上使用 class Bob
:
轻松访问属性。 Bob.image
比bob[0]
更容易记住。列表越长越难
代码可读性。我不知道 bob[7]=bob[3]+bob[6]
行的作用。使用 class,同一行变为 Bob.armor=Bob.shield+Bob.helmet
,我知道它的作用。
组织。如果某些函数仅用于字符,那么将它们声明在属性之后是可行的。 class 强制您将与角色相关的所有内容都放在同一个地方。
不过,您可以使用字典来代替列表:
bob = {"image":image, "stuff":stuff[:], ...}
bob["armor"]=bob["shield"]+bob["helmet"]
与 class 一样,您可以轻松访问属性并且代码可读。
在 pygame 的几乎所有示例程序中,字符都被实例化为 classes,并使用如下代码:
class Character(object):
def__init__(self,image,stuff):
self.image = image
self.stuff = stuff[:]
bob = Character(image,stuff)
我想知道使用 class 与仅使用普通列表相比有什么好处。我可以不使用 class 实例化而是创建一个这样的列表:
bob = [image,stuff[:]]
我想知道人们使用 classes 的原因是否是为了具有直接与角色交互的功能并且只是定义为 class 的一部分而不是作为单独的功能可以用在角色上。
谢谢!
一般来说,我会说它更清楚。使用 list
,您最终会想 "what was at index 0? what was at index 1?" 等等。然后你必须通过代码回溯以找到定义 bob
的位置以确保。
此外,如果您在整个代码中创建其他字符,则必须以相同的方式创建它们。使用 class
,您可以轻松地搜索代码库以创建角色并更新它(例如,如果您想向角色添加另一个 属性),如果您遗漏了任何一个,python 将抛出一个Exception
所以你知道在哪里修复它。有了这个列表,将很难找到并且 python 不会告诉您是否遗漏了任何信息 -- 您会得到一个奇怪的 IndexError
,您需要追溯至根本原因这是更多的工作。
使用 class
时,您可以从其他 class
继承并创建 method
,这不适用于 list
。但是如果你知道你只会像你的 class Character
那样使用静态值,你可能会检查 namedtuple
。这是一个如何使用它的简单示例:
from collections import namedtuple
Character = namedtuple('Character', 'image stuff')
bob = Character(image, stuff)
在这个简单的例子中,为什么要在列表 bob
上使用 class Bob
:
轻松访问属性。
Bob.image
比bob[0]
更容易记住。列表越长越难代码可读性。我不知道
bob[7]=bob[3]+bob[6]
行的作用。使用 class,同一行变为Bob.armor=Bob.shield+Bob.helmet
,我知道它的作用。组织。如果某些函数仅用于字符,那么将它们声明在属性之后是可行的。 class 强制您将与角色相关的所有内容都放在同一个地方。
不过,您可以使用字典来代替列表:
bob = {"image":image, "stuff":stuff[:], ...}
bob["armor"]=bob["shield"]+bob["helmet"]
与 class 一样,您可以轻松访问属性并且代码可读。